PROBLEM
http://acm.hdu.edu.cn/showproblem.php?pid=1006
note
由于赋值时MAXN没加括号,BUG了半天。。。
#include<stdio.h>
#define MAXN 12*60*60 //以12小时来算
double max(double a,double b,double c)
{
a=(a>b?a:b);
a=(a>c?a:c);
return a;
}
double min(double a,double b,double c)
{
a=(a<b?a:b);
a=(a<c?a:c);
return a;
}
int main()
{
double h,m,s,hm,hs,ms,t_hm,t_hs,t_ms,n;
h=1.0/120; //时分秒针角速度
m=1.0/10;
s=6;
hm=m-h; //相对角速度
hs=s-h;
ms=s-m;
t_hm=360/hm; // 两针再次重合时间
t_hs=360/hs;
t_ms=360/ms;
while(scanf("%lf",&n)!=EOF)
{
if(n<0)
break;
double a[6];
a[0]=n/hm; //两针分开N度时间
a[1]=n/hs;
a[2]=n/ms;
a[3]=(360-n)/hm; // 两针合并到N度时间
a[4]=(360-n)/hs;
a[5]=(360-n)/ms;
double i,j,k,ans=0,p,q;
for(i=0;i<=1.0*MAXN;i+=t_hm)
{
for(j=0;j<=1.0*MAXN;j+=t_hs)
{
if(j+a[1]>i+a[3]) break;
if(i+a[0]>j+a[4]) continue;
for(k=0;k<=1.0*MAXN;k+=t_ms)
{
if(k+a[2]>i+a[3]||k+a[2]>j+a[4])break;
if(i+a[0]>k+a[5]||j+a[1]>k+a[5])continue;
p=max(i+a[0],j+a[1],k+a[2]);
q=min(i+a[3],j+a[4],k+a[5]);
if(q>p)
ans+=q-p;
}
}
}
printf("%.3lf\n",ans/(MAXN)*100.0);
}
return 0;
}