Pagini recente » Cod sursa (job #3174022) | Cod sursa (job #154337) | Cod sursa (job #3265837) | Cod sursa (job #1891708) | Cod sursa (job #2639472)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("popandai.in");
ofstream fout("popandai.out");
const int INF = 0x3f3f3f3f;
int cnt[305][305], N, K, under[305], over[305], ans;
pair<int,int> P[305];
inline int det( int s1, int s2, int p ){
return ( P[s2].first - P[s1].first ) * ( P[p].second - P[s1].second ) -
( P[p].first - P[s1].first ) * ( P[s2].second - P[s1].second );
}
inline int get_nr( int i, int j, int k ){
if( P[i].first > P[j].first ) swap( i, j );
if( P[i].first > P[k].first ) swap( i, k );
if( P[j].first > P[k].first ) swap( j, k );
/// am i, j, k in ordine dupa x
if( det( i, k, j ) > 0 )
return cnt[i][j] + cnt[j][k] - cnt[i][k];
else
return cnt[i][k] - cnt[i][j] - cnt[j][k] - 1;
}
int main(){
fin >> N >> K;
for( int i = 1; i <= N; i++ )
fin >> P[i].first >> P[i].second;
sort( P + 1, P + N + 1 );
for( int i = 1; i <= N; i++ ){
for( int j = i + 1; j <= N; j++ ){
for( int k = 1; k <= N; k++ ){
if( det( i, j, k ) < 0 && P[i].first <= P[k].first && P[k].first <= P[j].first )
cnt[i][j]++, cnt[j][i]++;
}}}
ans = INF;
for( int i = 1; i <= N; i++ ){
for( int j = i + 1; j <= N; j++ ){
for( int x = 0; x <= K; x++ )
under[x] = over[x] = INF;
for( int k = 1; k <= N; k++ ){
int pcts = get_nr( i, j, k );
if( det( i, j, k ) > 0 )
over[pcts] = min( over[pcts], det(i, j, k) );
else
under[pcts] = min( under[pcts], -det(i, j, k) );
}
for( int x = K - 1; x >= 0; x-- ){
over[x] = min( over[x], over[x + 1] );
under[x] = min( under[x], under[x + 1] );
}
for( int x = 0; x <= K; x++ )
ans = min( ans, under[x] + over[K - x] );
}}
fout << ans / 2 << "." << ( (ans % 2 == 1) ? 5 : 0 ) << endl;
return 0;
}