您的位置:首页 > 其它

hdu 1006 Tick and Tick 时钟问题

2014-04-08 12:11 253 查看
难度:2

美剧找到所有的符合要求的区间

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
double max3(double a , double b , double c) {
return (a > b)?(a > c ? a : c) : (b > c ? b : c);
}
double min3(double a , double b , double c) {
return (a < b)?(a < c ? a : c) : (b < c ? b : c);
}
int main() {
double ss,mm,hh,sm,mh,sh,t_sm,t_mh,t_sh;
ss = 6.0 , mm = 0.1 , hh = 0.1/12.0;
sm = 6.0 - 0.1;
mh = 0.1 - 0.1/12.0;
sh = 6.0 - 0.1/12.0;
t_sm = 360.0 / sm;
t_mh = 360.0 / mh;
t_sh = 360.0 / sh;
int D;
double m[3] , n[3] , x[3] , y[3];
while(~scanf("%d" , &D) && D != -1) {
x[0] = D / sm;
x[1] = D / mh;
x[2] = D / sh;
y[0] = (360.0 - D) / sm;
y[1] = (360.0 - D) / mh;
y[2] = (360.0 - D) / sh;
double st , ed , ans = 0;
for(m[0]=x[0],n[0]=y[0];m[0]<=43200;m[0]+=t_sm,n[0]+=t_sm) {
for(m[1]=x[1],n[1]=y[1];m[1]<=43200;m[1]+=t_mh,n[1]+=t_mh) {
if(m[0] > n[1]) continue;
if(n[0] < m[1]) break;
for(m[2]=x[2],n[2]=y[2];m[2]<=43200;m[2]+=t_sh,n[2]+=t_sh) {
if(n[2] < m[1] || n[2] < m[0]) continue;
if(m[2] > n[0] || m[2] > n[1]) break;
st = max3(m[0] , m[1] , m[2]);
ed = min3(n[0] , n[1] , n[2]);
if(ed > st) ans += ed - st;
}
}
}
printf("%.3lf\n" , ans/432.0);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: