Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
贴个我认为明显有错但是能AC的程序,欢迎大家出数据把这个程序搞掉Source Code Problem: 2428 User: Los_Angelos_Laycurse Memory: 500K Time: 0MS Language: C++ Result: Accepted Source Code #include<iostream> #include<stdio.h> #include<algorithm> #include<cmath> #include<cstdlib> #include<cstring> using namespace std; double xx,yy,zz,dp[2][211][211],inf=(double)1000000000*(double)1000000000,ans; double area(double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3) { double value1=(x1-x2)*(x3-x2)+(y1-y2)*(y3-y2)+(z1-z2)*(z3-z2),value2=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2))*((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(z3-z2)*(z3-z2)); value1*=value1; if(value2-value1<0) value2=value1; return 0.5*sqrt(value2-value1); } struct poly { double x,y,z; }; poly a[2][111]; int n,m; int main() { int i,j,s,p,q,id; double in,x1,y1,x2,y2; scanf("%d",&n); ans=inf; in=1000000000; for(i=0;i<n;i++) { scanf("%lf%lf",&a[1][i].x,&a[1][i].y); if(a[1][i].y<in) { in=a[1][i].y; id=i; } a[1][i].z=0; } x1=a[1][id].x-a[1][(id+n-1)%n].x; y1=a[1][id].y-a[1][(id+n-1)%n].y; x2=a[1][(id+1)%n].x-a[1][id].x; y2=a[1][(id+1)%n].y-a[1][id].y; if(y1*x2>y2*x1) { for(i=0;i<(n-1)/2;i++) swap(a[1][i+1],a[1][n-1-i]); } scanf("%d",&m); in=1000000000; for(i=0;i<m;i++) { scanf("%lf%lf",&a[0][i].x,&a[0][i].y); if(a[0][i].y<in) { in=a[0][i].y; id=i; } a[0][i].z=10; } x1=a[0][id].x-a[0][(id+m-1)%m].x; y1=a[0][id].y-a[0][(id+m-1)%m].y; x2=a[0][(id+1)%m].x-a[0][id].x; y2=a[0][(id+1)%m].y-a[0][id].y; if(y1*x2>y2*x1) { for(i=0;i<(m-1)/2;i++) swap(a[0][i+1],a[0][m-1-i]); } for(i=0;i<1;i++) { for(j=i;j<n+i+1;j++) for(s=0;s<=m;s++) { if(j==i&&s==0) { dp[0][j][s]=area(a[1][j%n].x,a[1][j%n].y,a[1][j%n].z,a[0][s%m].x,a[0][s%m].y,a[0][s%m].z,a[0][(s+1)%m].x,a[0][(s+1)%m].y,a[0][(s+1)%m].z); dp[1][j][s]=area(a[1][j%n].x,a[1][j%n].y,a[1][j%n].z,a[1][(j+1)%n].x,a[1][(j+1)%n].y,a[1][(j+1)%n].z,a[0][s%m].x,a[0][s%m].y,a[0][s%m].z); } else dp[0][j][s]=dp[1][j][s]=inf; } for(j=i;j<n+i+1;j++) for(s=0;s<m+1;s++) { if(j!=i||s!=0) { if(j>i) { dp[0][j][s]=min(dp[0][j][s],dp[1][j-1][s]); dp[1][j][s]=min(dp[1][j][s],dp[1][j-1][s]); } if(s>0) { dp[0][j][s]=min(dp[0][j][s],dp[0][j][s-1]); dp[1][j][s]=min(dp[1][j][s],dp[0][j][s-1]); } dp[0][j][s]+=area(a[1][j%n].x,a[1][j%n].y,a[1][j%n].z,a[0][s%m].x,a[0][s%m].y,a[0][s%m].z,a[0][(s+1)%m].x,a[0][(s+1)%m].y,a[0][(s+1)%m].z); dp[1][j][s]+=area(a[1][j%n].x,a[1][j%n].y,a[1][j%n].z,a[1][(j+1)%n].x,a[1][(j+1)%n].y,a[1][(j+1)%n].z,a[0][s%m].x,a[0][s%m].y,a[0][s%m].z); } } if(ans>min(dp[0][n+i][m-1],dp[1][n+i-1][m])) ans=min(dp[0][n+i][m-1],dp[1][n+i-1][m]); } printf("%.0f\n",ans); return 0; } 开始写成 for(i=0;i<n;i++) AC了,然后想提高效率随手把它改成for(i=0;i<1;i++)居然也AC了,但我认为后者明显是错的 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator