Pagini recente » Cod sursa (job #1119230) | Cod sursa (job #1935063) | Cod sursa (job #2065811) | Clasament simulare_oji_2023_clasa_10_14_martie | Cod sursa (job #1714630)
#include <bits/stdc++.h>
#define maxN 302
#define zeros(x) x & (-x)
#define inf 2000000000.00
#define x first
#define y second
#define pii pair < int, int >
using namespace std;
using namespace std;
int n, k, m, d[maxN][maxN];
double ans[maxN], Ans[maxN], sol, Aria;
int Norm[maxN], aib[maxN];
pii v[maxN];
int Det(int i, int j, int k)
{
int det = v[i].x * v[j].y + v[j].x * v[k].y + v[i].y * v[k].x - v[j].x * v[i].y - v[k].x * v[j].y - v[i].x * v[k].y;
return det;
}
void read()
{
int i;
freopen("popandai.in", "r", stdin);
scanf("%d %d", &n, &k);
for (i = 1; i <= n; ++ i)
scanf("%d %d", &v[i].x, &v[i].y);
}
void prec()
{
int i, j, k;
for (i = 1; i <= n; ++ i)
for (j = i + 1; j <= n; ++ j)
for (k = j + 1; k <= n; ++ k)
if (Det(i, j, k) < 0)
{
++ d[i][k];
++ d[k][i];
}
}
void solve()
{
int i, j, p;
sort(v + 1, v + n + 1);
prec();
sol = inf;
for (i = 1; i < n; ++ i)
for (j = i + 1; j <= n; ++ j)
{
for (p = 0; p <= n + 1; ++ p)
ans[p] = Ans[p] = inf;
double D;
Aria = inf;
for (p = 1; p <= n; ++ p)
if (i != p && j != p)
{
D = Det(i, j, p);
int x = i, y = j, z = p;
if (v[x].x > v[y].x)
swap(x, y);
if (v[x].x > v[z].x)
swap(x, z);
if (v[y].x > v[z].x)
swap(y, z);
int np;
np = d[x][y] + d[y][z] - d[x][z];
if (np < 0)
np = -np - 1;
if (D > 0)
{
if (ans[np] > D)
ans[np] = D;
}
else
{
D = -D;
if (Ans[np] > D)
Ans[np] = D;
}
}
for (p = n; p >= 0; -- p)
{
ans[p] = min(ans[p], ans[p + 1]);
Ans[p] = min(Ans[p], Ans[p + 1]);
}
for (p = 0; p <= k; ++ p)
if (ans[p] + Ans[k - p] < Aria)
Aria = ans[p] + Ans[k - p];
if (Aria < sol)
sol = Aria;
}
}
void write()
{
freopen("popandai.out", "w", stdout);
sol = sol * 0.5;
printf("%.5lf", sol);
}
int main()
{
read();
solve();
write();
return 0;
}