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;
}
美剧找到所有的符合要求的区间
#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;
}
相关文章推荐
- HDU 1006 Tick and Tick 时钟指针问题
- [ACM_模拟] HDU 1006 Tick and Tick [时钟间隔角度问题]
- hdu 1006 Tick and Tick 模拟时钟注意时间连续性!
- HDU 1006 Tick and Tick
- HDU1006——Tick and Tick
- HDU 1006 Tick and Tick
- hdu 1006 Tick and Tick (解不等式方程)
- HDU-1006 Tick and Tick 几何
- HDU 1006 Tick and Tick( 模拟题)
- HDU-1006 Tick and Tick(模拟 + 区间交集 + 数学)
- A - Tick and Tick HDU - 1006
- hdu_1006 Tick and Tick(暴力模拟)
- HDU 1006 Tick and Tick 模拟
- HDU 1006 Tick and Tick
- hdu 1006 Tick and Tick (解不等式方程)
- [HDU 1006] Tick and Tick 模拟题
- hdu1006--Tick and Tick--时钟角度问题+区间求并求交
- HDU 1006 Tick and Tick
- HDU 1006时钟三针相差d度问题(枚 4000 举、区间)
- hdoj1006 Tick and Tick(数学问题,解不等式,求并集)