hdu_5705_Clock("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)

时间:2023-03-09 04:11:25
hdu_5705_Clock("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5705

题意:给你一个时间和一个角度,问你下一个时针和分针形成给出的角度是什么时候

题解:我们可以将这个问题看成追及问题,考虑时针:每小时30°,每分钟1/2°,每秒1/120°,考虑分针:没分钟6°,每秒1/10°,如果我把全部同时乘一个120,不就能避免精度造成的问题了吗!现在再来考虑时针和分针的位置情况:这里我们以分针按顺时针的方向到时针

hdu_5705_Clock("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)

1:当时针和分针的θ∠大于180*120时(1)当(360*120-θ)大于给出的角度an时,需要的时间ans=h+(θ-an*120)/11,/11是因为每秒钟时针走1°,分针走12°。(2)当(360*120-θ)小于给出的角度an时,需要的时间ans=h+(θ-(360-an)*120)/11

2:当时针和分针的θ∠小于180*120时(1)当(360*120-θ)大于给出的角度an时,需要的时间ans=h+(θ-an*120)/11。(2)当(360*120-θ)小于给出的角度an时,需要的时间ans=h+(θ+an*120)/11。

最后再根据经过的时间算出当前的时间

 #include<cstdio>
int hh,mm,ss,ic=,h,m,s,an,d,ans,mo=*,mod=*;
void fuck(){
s++,h=(*h+m*+s)%mo,m=(m*+*s)%mo,d=(h+mo-m)%mo;
if(d>=mod)if(an*<mo-d)ans=h+(d-an*)/;else ans=h+(d-(-an)*)/;
else if(an*<=d)ans=h+(d-an*)/;else ans=h+(d+an*)/;
}
int main(){
while(~scanf("%d:%d:%d%d",&h,&m,&s,&an))
fuck(),printf("Case #%d: %02d:%02d:%02d\n",ic++,ans/%,ans/%,ans%);
return ;
}