#include <bits/stdc++.h>

#define NS (3005)
#define eps (1e-10)

using namespace std;

typedef long double LD;

const LD PI = acos(-1);

struct vec
{
LD x, y, angle;
vec() {x = y = 0;}
vec(LD a, LD b) {x = a, y = b;}
void input() {scanf("%Lf%Lf", &x, &y);}
vec operator + (const vec oth) const {return vec(x + oth.x, y + oth.y);}
vec operator - (const vec oth) const {return vec(x - oth.x, y - oth.y);}
bool operator < (const vec oth) const {return angle < oth.angle;}
LD crs(const vec oth) {return x * oth.y - y * oth.x;}
} P[NS];

int n;

LD ans;

int main(int argc, char const* argv[])
{
scanf("%d", &n);
for (int i = 1; i <= n; i += 1) P[i].input();
for (int i = 1; i <= n; i += 1)
{
for (int j = i + 1; j <= n; j += 1)
{
P[j].angle = atan2(P[j].y - P[i].y, P[j].x - P[i].x);
if (P[j].angle < 0) P[j].angle += PI * 2;
}
P[i].angle = 0, sort(P + i + 1, P + n + 1);
LD lim = PI; int p = i + 1; vec Q;
for (int j = i + 1; j <= n; j += 1)
{
lim += P[j].angle - P[j - 1].angle;
while (p <= n && P[p].angle < lim) Q = Q + P[p++] - P[i];
if (lim >= PI * 2)
{
lim -= PI * 2;
if (p > n) p = i + 1;
while (p <= n && P[p].angle < lim) Q = Q + P[p++] - P[i];
}
ans += (P[j] - P[i]).crs(Q) * 0.5, Q = Q - P[j] + P[i];
}
}
printf("%.1Lf\n", ans);
return 0;
}


Remmina

No puzzle that couldn't be solved.