1. 程式人生 > >luogu cogs 油滴擴展

luogu cogs 油滴擴展

ble 開始 open 輸出格式 輸出 print out ostream mat

1076. [NOIP2010沖刺六] 油滴擴展

★ 輸入文件:oilbox.in 輸出文件:oilbox.out 簡單對比
時間限制:1 s 內存限制:128 MB

【題目描述】


在一個長方形框子裏,最多有N(O≤N≤6)個相異的點。在其中任何一個點上放一個很小的油滴(即半徑可視為0),那麽這個油滴會一直擴展,直到接觸到其他油滴或者框子的邊界。必須等一個油滴擴展完畢才能放置下一個油滴。那麽應該按照怎樣的順序在這N個點上放置油滴,才能使放置完畢後所有油滴占據的總面積最大呢?(不同的油滴不會相互融合)


【輸入格式】


第一行一個整數N。

第二行為長方形邊框一個頂點及其對角頂點的坐標,x,y,x‘,y’。

接下去N行,每行兩個整數Xi,yi,表示盒子內N個點的坐標。

以上所有的整數都在[-1000,1000]內。


【輸出格式】


一行,一個整數,長方形盒子剩余的最小空間(結果四舍五入輸出)。


【樣例輸入】

2

0 0 10 10

3 3

7 7


【樣例輸出】

50

【提示】


註:圓的面積公式S=pi*r*r,其中r為圓的半徑,pi=3.1415926。

 1 #include<cmath>
 2 #include<iostream>
 3 #include<algorithm>
 4
#include<cstdio> 5 using namespace std; 6 int n,xa,ya,xb,yb; 7 const double infd=100000000.0;//這個是對於double的INF 8 const double PI=acos(-1);//為了精度 9 double ans; 10 int x[10],y[10]; 11 double r[10]; 12 int seq[10]; 13 int fact[10]={0,1,2,6,24,120,720};//階乘值,其實就是全排列數 14 double dist(int a,int b){//求兩圓a,b的圓心距 15 return
sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])); 16 } 17 void solve(){ 18 double cur;//current answer目前的答案 19 cur=abs(xa-xb)*abs(ya-yb);//剛開始還沒被油滴覆蓋,所以是整個盒子面積 20 for(int i=0;i<n;i++){//對填充序列中的每個圓計算其在此情況下的半徑 21 double mr=infd;//當前圓的半徑的最大值max radian(mr) 22 mr=min(min(abs(x[seq[i]]-xa),abs(x[seq[i]]-xb)),min(abs(y[seq[i]]-ya),abs(y[seq[i]]-yb))); 23 //以上該行只考慮了盒子邊界,未考慮其他之前填好的圓 24 for(int j=0;j<i;j++){//現在考察之前擴展完畢的油滴 25 double t=dist(seq[i],seq[j])-r[seq[j]]; 26 //圓心距減去該圓半徑,有可能有負數,此時本圓被包含在之前的圓中,需要特判,否則WA,60分 27 mr=mr<max(t,(double)0)?mr:max(t,(double)0);//特判。三思而後提交!consider twice before you submit! 28 } 29 r[seq[i]]=mr;//記錄該圓半徑 30 cur-=PI*mr*mr;//計算目前未被覆蓋的面積 31 } 32 ans=min(ans,cur);//更新答案 33 return; 34 } 35 int main(){ 36 freopen("oilbox.in","r",stdin); 37 freopen("oilbox.out","w",stdout); 38 cin>>n>>xa>>ya>>xb>>yb; 39 ans=abs(xa-xb)*abs(ya-yb);//初始化 40 for(int i=0;i<n;i++){ 41 seq[i]=i; 42 cin>>x[i]>>y[i]; 43 } 44 for(int i=0;i<fact[n];i++){ 45 solve(); 46 next_permutation(seq,seq+n);//求下一個排列 47 } 48 printf("%.0lf",ans); 49 return 0; 50 }

luogu cogs 油滴擴展