记录编号 |
42528 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2010冲刺六]油滴扩展 |
最终得分 |
100 |
用户昵称 |
QhelDIV |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2012-09-26 10:06:43 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include <fstream>
#include <cstdlib>
#include <iomanip>
#include <cmath>
using namespace std;
ifstream fin("oilbox.in");
ofstream fout("oilbox.out");
double Xmin,Xmax,Ymin,Ymax,X[100],Y[100];
double R[100],Sum,Max;
bool flag[10];
int N,X1,X2,Y1,Y2,order[100];
const double pi=3.1415926;
void Initialize()
{
fin>>N;
fin>>X1>>Y1>>X2>>Y2;
Xmin=min(X1,X2);Xmax=max(X1,X2);
Ymin=min(Y1,Y2);Ymax=max(Y1,Y2);
for(int i=1;i<=N;i++)
fin>>X[i]>>Y[i];
}
double Fig(int a,int b)
{
return sqrt((X[a]-X[b])*(X[a]-X[b])+(Y[a]-Y[b])*(Y[a]-Y[b]));
}
void DFS(int pos)
{
int I;
if(pos>N)
Max=max(Max,Sum);
for(int i=1;i<=N;i++)
if(!flag[i])
{
int j;
R[i]=min(Xmax-X[i],X[i]-Xmin);
R[i]=min(R[i],Y[i]-Ymin);
R[i]=min(R[i],Ymax-Y[i]);
for(j=1;j<=N;j++)
if(flag[j])
{
R[i]=min(R[i],Fig(i,j)-R[j]);
if(Fig(i,j)<R[j])
R[i]=0;
}
flag[i]=true;
double rec=Sum;
Sum+=R[i]*R[i]*pi;
DFS(pos+1);
R[i]=0;
flag[i]=false;
Sum=rec;
}
}
int main()
{
Initialize();
DFS(1);
fout<<setiosflags(ios::fixed)<<setprecision(0)<<(Xmax-Xmin)*(Ymax-Ymin)-Max<<endl;
fin.close();
fout.close();
return 0;
}