| ||||||||||
| 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