40分求助

P1378 油滴扩展

```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<cstdlib> #include<queue> int x[10],y[10],x1,yy1,x2,y2,n,b[10]; double r[10],ans,ansmax,pi=3.1415926535897932384626433832795,smax; using namespace std; double dis(int xx,int yy) { return sqrt((x[xx]-x[yy])*(x[xx]-x[yy])+(y[xx]-y[yy])*(y[xx]-y[yy])); } int main() { cin>>n; cin>>x1>>yy1>>x2>>y2; for(int i=1;i<=n;i++) { cin>>x[i]>>y[i]; } for(int i=1;i<=n;i++) b[i]=i; smax=abs(x1-x2)*abs(yy1-y2); do { ans=0; for(int i=1;i<=n;i++) { r[b[i]]=(double)min(min(abs(x[b[i]]-min(x1,x2)),abs(max(x1,x2)-x[b[i]])),min(abs(min(yy1,y2)-y[b[i]]),abs(max(yy1,y2)-y[b[i]]))); for(int j=1;j<i;j++) { r[b[i]]=min(dis(b[j],b[i])-r[b[j]],r[b[i]]); } r[b[i]]=max(r[b[i]],0.0); ans+=pi*r[b[i]]*r[b[i]]; } ansmax=max(ansmax,ans); }while(next_permutation(b+1,b+1+n)); cout<<(int)(smax-ansmax+0.5)<<endl; return 0; } ``` 60分代码。原因在dis函数被设为int而不是double直接自动取整= =。
by Ruff @ 2018-04-26 20:32:18


|