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 |
我的为什么一直WA?In Reply To:o(clogc+c^2)的算法会超时吗? Posted by:cscjzz at 2005-07-23 13:51:35 #include "stdio.h" #include "math.h" #define pi 3.1415926535897932384626433832795028841971 int d,n,c,g; int k,cs[1001]; double average; void sort() {int i,j,temp; for(i=1;i<c;i++) for(j=1;j<c-i+1;j++) if(cs[j]>cs[j+1]) {temp=cs[j]; cs[j]=cs[j+1]; cs[j+1]=temp; } } double max(double a,double b) {if(a>b) return a; else return b; } double sin1(int i,int j) { if(j==1) return sin(average*(n-cs[i])*pi/180); else return sin(average*(cs[j]-cs[i])*pi/180); } double comarea() {int i,j,t; int sign1,sign2; int mid; double area1,area2,aread; aread=0; for(t=3;t<=c-1;t++) {mid=(cs[1]+cs[t])/2; for(i=2;i<t&&cs[i]<mid;i++); if(i>=t) area1=sin1(1,i-1)+sin1(i-1,t); else area1=max(sin1(1,i)+sin1(i,t),sin1(1,i-1)+sin1(i-1,t)); mid=(cs[t]+n)/2; for(j=t+1;j<c+1&&cs[j]<mid;j++); if(j>=c+1) area2=sin1(t,j-1)+sin1(j-1,1); else area2=max(sin1(t,j)+sin1(j,1),sin1(t,j-1)+sin1(j-1,1)); if(area1+area2>aread) aread=area1+area2; } return (0.125*d*d*aread); } int main() {int scenario; int i,j,count=0; double area; scanf("%d",&scenario); while(scenario--) {scanf("%d%d%d%d",&d,&n,&c,&g); for(i=1,k=0;k<c;i++,k++) cs[i]=(g*k)%n; sort(); average=360*1.0/n; area=comarea(); printf("Scenario #%d:\n",++count); printf("%.6lf\n\n",area); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator