Pagini recente » Cod sursa (job #1580085) | Cod sursa (job #407591) | Cod sursa (job #1892324) | Cod sursa (job #297836) | Cod sursa (job #2010275)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300;
const int INF = 2e9;
typedef pair <int, int> PII;
PII v[MAXN];
int sub[MAXN][MAXN];
int det(PII x, PII y, PII z) {
return x.first * (y.second - z.second) + y.first * (z.second - x.second) + z.first * (x.second - y.second);
}
int inside(int i, int j, int k) {
if (v[i] > v[j])
swap(i, j);
if (v[i] > v[k])
swap(i, k);
if (v[j] > v[k])
swap(j, k);
return abs(sub[i][k] - sub[i][j] - sub[j][k]);
}
int splan[2][MAXN + 1];
int main()
{
ifstream fin("popandai.in");
ofstream fout("popandai.out");
int n, k;
fin >> n >> k;
for (int i = 0; i < n; ++i)
fin >> v[i].first >> v[i].second;
sort(v, v + n);
for (int i = 0; i < n - 1; ++i)
for (int j = i + 1; j < n; ++j)
for (int ind = 0; ind < n; ++ind)
if ((ind ^ i) && (ind ^ j) && v[i].first <= v[ind].first && v[ind].first < v[j].first && det(v[i], v[j], v[ind]) < 0) {
++sub[i][j];
++sub[j][i];
}
int ans = INF;
for (int i = 0; i < n - 1; ++i)
for (int j = i + 1; j < n; ++j) {
for (int ind = 0; ind <= n; ++ind)
splan[0][ind] = splan[1][ind] = INF;
for (int ind = 0; ind < n; ++ind)
if ((ind ^ i) && (ind ^ j)) {
int which = (det(v[i], v[j], v[ind]) < 0);
int num = inside(i, j, ind);
splan[which][num] = min(abs(det(v[i], v[j], v[ind])), splan[which][num]);
}
for (int ind = n - 1; ind >= 0; --ind)
splan[0][ind] = min(splan[0][ind], splan[0][ind + 1]);
for (int ind = 0; ind <= k; ++ind)
if (splan[1][ind] != INF && splan[0][k - ind] != INF)
ans = min(ans, splan[1][ind] + splan[0][k - ind]);
}
fout << setprecision(1) << fixed << double(ans) / 2.0;
fin.close();
fout.close();
return 0;
}