HDU1006——Tick and Tick
2018-03-18 18:10
381 查看
这题很滑稽,因为开始我算出0的百分比是200%,这让我想起了那个实验产率300%的化学笑话。好吧,仔细讲讲这题: 有几个逻辑关键点:首先,24h与12h的情况完全一样。并且根据常识,在0:00与12:00两个时刻表盘上三个指针皆重合。并且,三个指针运动相互独立,没有干扰。 很自然能想到我们可以两两考虑这三个表针,算它们重合周期与周期内指针夹角超过n的时间。最后就是把所有时间取交集即可。剩下的就是一些细节问题了。 这里我主要被取交集这里卡了一下,数组位置不同,大小不同,该怎样取得交集呢?思考好久后,我注意到长的时间段能包含好几个短的时间段,我们先确定与长时间重合的短时间段有哪些,再定义个min,max函数,确定头尾加到总时间sum上即可。如此,我们可以写出以下代码:
#include <stdio.h> double max(double a,double b,double c){ if(a>b){ b=a; } if(b>c){ c=b; } return c; } double min(double a,double b,double c){ if(c<b){ b=c; } if(b<a){ a=b; } return a; } int main(int argc, const char * argv[]) { double n; while(1){ scanf("%lf",&n); if(n<0){ break; } if(n>=180){ printf("%.3lf\n",0.); continue; } double vs=6; //度/s double vm=360./3600; double vh=360./(3600*12); double dsh=360/(vs-vh); double dsm=360/(vs-vm); double dmh=360/(vm-vh); //这里存储着每次两针合并所用的时间,以秒计 double i,j,k; double sum=0; double starmh=n/(vm-vh); double endmh=dmh-starmh; double starsh=n/(vs-vh); double endsh=dsh-starsh; double starsm=n/(vs-vm); double endsm=dsm-starsm; //初始为单周期数据,后期迭代 double nsmh,nnmh,nssm,nnsm,nssh,nnsh; for(i=0;i<=12.*3600;i+=dmh){ nsmh=starmh+i; nnmh=endmh+i; for(j=0;j<=12.*3600;j+=dsm){ nssm=starsm+j; nnsm=endsm+j; if(nnsm<nsmh){ continue; } if(nssm>nnmh){ break; } for(k=0;k<12.*3600;k+=dsh){ nssh=starsh+k; nnsh=endsh+k; if(nnsh<nssm){ continue; } if(nssh>nnsm){ break; } double start=max(nssh,nssm,nsmh); double end=min(nnsm,nnsh,nnmh); if(start<end){ sum+=(end-start); } } } } double result=sum*100/(3600.*12); printf("%.3lf\n",result); } return 0; }
相关文章推荐
- 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
- 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 时钟指针问题
- hdu 1006 Tick and Tick (解不等式方程)
- hdu 1006 Tick and Tick 模拟时钟注意时间连续性!
- HDU-1006-Tick and Tick
- [ACM_模拟] 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
- [HDU 1006] Tick and Tick 模拟题
- HDU 1006 Tick and Tick( 模拟题)