Pagini recente » Cod sursa (job #1621854) | Cod sursa (job #1880091) | Cod sursa (job #1146176) | Cod sursa (job #471552) | Cod sursa (job #2763840)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("copaci.in");
ofstream cout("copaci.out");
const int NMAX = 1e5;
int N;
pair <int, int> v[NMAX + 2];
long long TriangleArea(pair <int, int> A, pair <int, int> B, pair <int, int> C)
{
return 1LL * A.first * B.second + 1LL * B.first * C.second + 1LL * C.first * A.second
- 1LL * C.first * B.second - 1LL * A.first * C.second - 1LL * B.first * A.second;
}
int ABS(int x)
{
return max(x, -x);
}
int main()
{
cin >> N;
for(int i = 1; i <= N; i++)
{
cin >> v[i].first >> v[i].second;
}
v[N + 1] = v[1];
///A = I + (P / 2) - 1
///I = A - (P / 2) + 1
long double area = 0;
for(int i = 1; i <= N; i++)
{
area += TriangleArea({0, 0}, v[i], v[i + 1]);
}
area /= 2;
area = max(area, -area);
int perimeter = 0;
for(int i = 1; i <= N; i++)
{
perimeter += ABS(v[i + 1].first - v[i].first) / __gcd(ABS(v[i + 1].first - v[i].first), ABS(v[i + 1].second - v[i].second));
}
cout << area - 0.5 * perimeter + 1 << '\n';
return 0;
}