| 题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
|---|---|---|---|---|---|
| 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;
}
}
|