Pagini recente » Cod sursa (job #1802604) | Cod sursa (job #3281677) | Cod sursa (job #2946510) | Cod sursa (job #1341115) | Cod sursa (job #2303643)
#include<bits/stdc++.h>
using namespace std;
const int maxN=305;
inline int mabs(int x)
{
return (x>0)?x:(-x);
}
int aria;
int sub[maxN];
int a[maxN][maxN];
int jos[maxN],sus[maxN];
pair<int,int> v[maxN];
inline int det(int i,int j,int k)
{
return (v[j].first-v[i].first)*(v[k].second-v[i].second)-(v[k].first-v[i].first)*(v[j].second-v[i].second);
}
inline int getpoints(int i,int j,int k)
{
int p=0;
if(v[i]>v[j]) swap(i,j);
if(v[i]>v[k]) swap(i,k);
if(v[j]<v[k]) swap(j,k);
if(det(i,j,k)<0)
{
if(sub[i]!=k && sub[j]!=k)
{
p=a[i][j]-a[i][k]-a[k][j]-1;
if(sub[k]) p++;
}
else
if(sub[i]==k)
{
p=a[i][j]-a[k][j]-1;
}
else p=a[i][j]-a[i][k]-1;
}
else
{
if(sub[k]!=i && sub[k]!=j)
{
p=a[i][k]+a[k][j]-a[i][j];
if(sub[k] && det(i,j,sub[k])<0) p--;
}
else
if(sub[k]==i) p=a[k][j]-a[i][j]-1;
else p=a[i][k]-a[i][j]-1;
}
return p;
}
int n,k;
int sol;
const int inf=2000000000;
int main()
{
freopen("popandai.in","r",stdin);
freopen("popandai.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d%d",&v[i].first,&v[i].second);
sol=inf;
sort(v+1,v+n+1);
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
a[i][j]=0;
for(int k=1;k<=n;k++)
{
int aux;
aux=det(i,j,k);
if(aux<0 && (v[k].first-v[i].first)*(v[k].first-v[j].first)<=0)
{
a[i][j]++;
continue;
}
}
a[j][i]=a[i][j];
if(v[i].first==v[j].first)
if(v[i].second<v[j].second) sub[j]=i;
else
if(v[i].second<v[j].second) sub[i]=j;
}
}
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
for(int k=0;k<=n+1;k++)
sus[k]=jos[k]=inf;
for(int k=1;k<=n;k++)
{
if(k==i || k==j) continue;
aria=mabs(det(i,j,k));
int p=getpoints(i,j,k);
if(det(i,j,k)<0) jos[p]=min(jos[p],aria);
else sus[p]=min(sus[p],aria);
}
for(int k=n-1;k>=0;k--)
{
jos[k]=min(jos[k],jos[k+1]);
sus[k]=min(sus[k],sus[k+1]);
}
for(int t=0;t<=k;t++)
{
if(sus[t]!=inf && jos[k-t]!=inf && sus[t]+jos[k-t]<sol)
sol=sus[t]+jos[k-t];
if(jos[t]!=inf && sus[k-t]!=inf && jos[t]+sus[k-t]<sol)
sol=jos[t]+sus[k-t];
}
}
}
printf("%d",sol/2);
if(sol%2) printf(".5\n");
else printf(".0\n");
return 0;
}