永发信息网

acm 第1006题求有关 时钟的问题

答案:1  悬赏:70  手机版
解决时间 2021-04-16 08:28
acm 第1006题求有关 时钟的问题
最佳答案
首先是三个针角度的函数:
秒针:6t
分针:(t%60)/10
时针:(t%3600)/120

a是题目给你的限制时间
a <= | 6*t-(t%60)/10| <= 360-a
a <= | 6*t-(t%3600)/120 | <= 360-a
a <= | (t%60)/10-(t%3600)/120 | <= 360-a
时间只要满足上市就是happytime

由于double类型不好取mod
我就把时间分割成一分钟一分钟
循环个720次。。。。所以说这样的方法比较暴力
不过据说有循环,不过我想不出来。。。

然后就只计算上边三个式子的交集。。。
浮点型的交集好烦。。

#include
#include
#include
double num[14];
int hash[13];
int cmp(const void *a,const void *b)
{
return *(double *)a > *(double *)b ? 1 : -1;
}
void hh(double a ,double b)
{
int i;
double start,end;
start = 0;
end = a;
for(i=0;i<13;i++)
if(start <= num[i] && num[i+1] <= end)
hash[i] ++;
start = b;
end = 60;
for(i=0;i<13;i++)
if(start <= num[i] && num[i+1] <= end)
hash[i] ++;
}
void hhh(double a,double b)
{
int i;
if(b<0 || a>60)
return ;
for(i=0;i<13;i++)
if(a <= num[i] && num[i+1] <= b)
hash[i] ++;
}
double happytime(double ms,double hs,double a)
{
//a <= | 6*t-(t+ms)/10 | <= 360-a

//a <= | 6*t-(t+hs)/120 | <= 360-a

//a <= | (t+ms)/10-(t+hs)/120 | <= 360-a

//计算同时满足上边三个条件的t
double aa,ab,ac,ad,ba,bb,bc,bd,ca,cb,cc,cd,sum;

aa = (ms-a*10)/59;
ab = (ms+a*10)/59;
ac = (ms+10*a-3600)/59;
ad = (ms+3600-10*a)/59;

ba = (hs-12*ms-a*120)/11;
bb = (hs-12*ms+a*120)/11;
bc = (hs-12*ms+120*a-43200)/11;
bd = (hs-12*ms+43200-120*a)/11;

ca = (hs-a*120)/719;
cb = (hs+a*120)/719;
cc = (hs+120*a-43200)/719;
cd = (hs+43200-120*a)/719;

num[0] = 0;
num[1] = 60;
num[2] = aa;
num[3] = ab;
num[4] = ac;
num[5] = ad;
num[6] = ba;
num[7] = bb;
num[8] = bc;
num[9] = bd;
num[10] = ca;
num[11] = cb;
num[12] = cc;
num[13] = cd;

qsort(num,14,sizeof(num[0]),cmp);
memset(hash,0,sizeof(hash));
sum = 0;
hh(aa,ab);
hh(ba,bb);
hh(ca,cb);
hhh(ac,ad);
hhh(bc,bd);
hhh(cc,cd);
for(int i=0;i<13;i++)
if(hash[i]>=6)
sum += num[i+1] - num[i];
return sum;
}
int main()
{
int i,start;
double ans,a;
while(scanf("%lf",&a),a!=-1)
{
ans = 0;
start = 0;
for(i=0;i<720;i++)
{
if(i==109)
i = i;
ans += happytime(start%3600,start,a);
start += 60;
}
printf("%.3lf\n",ans*100/43200);
}
return 0;
}追问对不住啊,是c代码不是c++,抱歉追答改好了 C
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
泰安启程航运有限公司在什么地方啊,我要过去
HS编码知道的告诉下 谢谢
支付宝实名认证认证申请提交失败第一次我输入
进口儿童品牌批发
QQ验证码怎么取消啊
电脑高手进来帮帮我…
维盈椿粗粮饺子馆我想知道这个在什么地方
谁知道可以下林肯公园演唱会的MP4网站
生日 QQ前面的小蛋糕图标怎么去掉?我在qq秀
谁有挖宝经验说来听听!
宝缦精品窗帘(康平店)在哪里啊,我有事要去这
全牛馆怎么去啊,有知道地址的么
小小统计下,尸兄尸姐尸奶尸爷尸妹尸弟们都在
我想购买一台微型钻铣床在佛山哪里有卖。
哪个地方的风景美
推荐资讯
自然卷的头发能软化直吗
八年级上册地理哪些图题更重要
微盘为什么上传失败,为什么QQ群共享上传文件
什么是PUR胶水?选哪家的PUR胶水能放心呢?
长兴金丰建设有限公司在哪里啊,我有事要去这
可以发给我吗?
那琴渔村怎么去啊,有知道地址的么
QQ相册里的动感影集里的背景音乐该怎么写啊?
爱不是自私的占有语录,你这样小气,怎么会有朋
刀剑2..怎么多开?告诉下我教下,谢谢
俭仆冲地址在哪,我要去那里办事
请问中药桑白皮和桑树根皮是一回事么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?