您的位置:首页 > 其它

hdu 1006 Tick and Tick (解不等式方程)

2013-06-14 08:33 399 查看
// Time 46ms, Memory 328K
#include<iostream>
#include<iomanip>
using namespace std;
double d;
struct range
{
double l,r;
};
range get(double a,double b)
{
range p;
if(a<0)
{
p.r=(d-b)/a;p.l=(360-d-b)/a;
}
else
{
p.l=(d-b)/a;p.r=(360-d-b)/a;
}
if(p.l<0) p.l=0;
if(p.r>60) p.r=60;
if(p.l>p.r) p.l=p.r=0;
return p;
}
range set(range a,range b)
{
range p;
p.l=a.l>b.l?a.l:b.l;
p.r=a.r>b.r?b.r:a.r;
if(p.l>p.r) p.l=p.r=0;
return p;
}
double f(int x,int y)
{
int i,j,k;
double m,h,a,b,rea=0.0;
range s[3][2],s1;
m=1.0*y;h=1.0*x;
a=1.0/120-0.1;
b=30*h-5.5*m;
s[0][0]=get(a,b);
s[0][1]=get(-a,-b);
a=1.0/120-6;
b=30*h+0.5*m;
s[1][0]=get(a,b);
s[1][1]=get(-a,-b);
a=0.1-6;
b=6*m;
s[2][0]=get(a,b);
s[2][1]=get(-a,-b);
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
{
s1=set(set(s[0][i],s[1][j]),s[2][k]);
rea+=s1.r-s1.l;
}
return rea;
}
int main()
{
int i,j;
double s;
while(cin>>d && d!=-1)
{
s=0.0;
for(i=0;i<12;i++)
{
for(j=0;j<60;j++)
{
s+=f(i,j);
}
}
cout<<fixed<<setprecision(3)<<s*100.0/(3600*12)<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM-ICPC hdu C