Нужно сделать блок-схему по коду на языке C++.
#include
#include
#include
#include
struct Point { int x, y; };
using Poly = std::vector;
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return std::abs(a);
}
unsigned long long get_area_x2(const Poly& poly)
{
long long a = 0;
for (Poly::const_iterator itp = poly.end() - 1, it = poly.begin();
it != poly.end();
itp = it++)
a += (long long)it->x * itp->y - (long long)itp->x * it->y;
return std::abs(a);
}
unsigned count_boundary(const Poly& poly)
{
unsigned n_boundary = 0;
for (Poly::const_iterator itp = poly.end() - 1, it = poly.begin();
it != poly.end();
itp = it++)
n_boundary += gcd(it->x - itp->x, it->y - itp->y);
return n_boundary;
}
int main()
{
unsigned n = 0;
std::cin >> n;
Poly poly(n);
for (Point& p : poly)
std::cin >> p.x >> p.y;
unsigned long long area_x2 = get_area_x2(poly);
// Удвоенная площадь многоугольника
unsigned n_boundary = count_boundary(poly);
// Количество целочисленных точек на границе
unsigned long long n_inside = (area_x2 + 2 - n_boundary) / 2;
// Из формулы Пика получаем количество точек внутри
std::cout << n_inside << std::endl;
}
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |