题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
---|---|---|---|---|---|
Tick and Tick | ★★☆☆☆ | 答案正确 | 100 | 2015-02-06 18:36:58 | 算法错误(0) |
在一天之内,求时、分、秒针之间相隔角度超过D度的时间占比例。
这题也是神烦。
1006.cpp代码已折叠
展开折叠内容
|
---|
#include<iostream> #include<iomanip> #include<cmath> #include<cstdio> using namespace std; int main() { while(1) { double D; cin>>D; if(D<-.5f) return 0; double t,happtT=0,lt,happyTime=0; bool openHappy=0,minTo; int k[4]={}; bool b[4]={}; for(t=0;t<360;) { double uOpen[4]={ 0, (360*k[1]+D)/11, (360*k[2]+D)/708, (360*k[3]+D)/719 }, uEnd[4]= { 0, (360*k[1]+360-D)/11, (360*k[2]+360-D)/708, (360*k[3]+360-D)/719 }; double minT=1e+9; int minTi; for(int i=1;i<=3;++i) { if(minT>=uOpen[i]-1e-9&&!b[i]) minT=uOpen[i],minTi=i,minTo=0; if(minT>=uEnd[i]-1e-9&&b[i]) minT=uEnd[i],minTi=i,minTo=1; } b[minTi]=!b[minTi]; if(minTo)++k[minTi]; if(b[1]&&b[2]&&b[3]&&!minTo) { lt=minT;openHappy=1; } if(minTo&&openHappy) { happyTime+=minT-lt; openHappy=0; } t=minT; } if(openHappy) happyTime+=360-lt; cout<<fixed<<setprecision(3)<<happyTime*100/360<<endl; } } |