前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

hdu1006

作者头像
@坤的
发布2018-06-04 10:50:05
3670
发布2018-06-04 10:50:05
举报
文章被收录于专栏:*坤的Blog*坤的Blog*坤的Blog

#include<stdio.h> #include using namespace std; #define INF 0x7fffffff double D; struct node { double l; double r; }s[3][2]; node interval(double a,double b)//解方程D<=|a*s-b|<=360-D { node p; if(a>0) { p.l=(D-b)/a; p.r=(360-D-b)/a; } else { p.l=(360-D-b)/a; p.r=(D-b)/a; } if(p.l>=p.r) { p.l=0; p.r=0; } if(p.l<0) p.l=0; if(p.r>60) p.r=60; return p; }

node jiao(node a,node b) { node p; p.l=max(a.l,b.l); p.r=min(a.r,b.r); if(p.l>=p.r) p.l=p.r=0; return p; } double solve(int h,int m) { double a,b; /* 时针与分针的角度处理 解方程式 D<=|hw-mw|<=360-D hw=(h+m/60+s/3600)30 mw=(m+s/60)6 / a=1.0/120.0-1.0/10.0; b=30h+m/2.0-6.0m; s[0][0]=interval(a,b); s[0][1]=interval(-a,-b); / 时针与秒针的角度处理 解方程式 D<=|hw-sw|<=360-D hw=(h+m/60+s/3600)30 sw=s6 / a=1.0/120-6.0; b=30h+m/2.0; s[1][0]=interval(a,b); s[1][1]=interval(-a,-b); /* 分针与秒针的角度处理 解方程式 D<=|mw-sw|<=360-D mw=(m+s/3600)30 sw=s6 / a=0.1-6; b=6m; s[2][0]=interval(a,b); s[2][1]=interval(-a,-b); //两个绝对值出来的区间取并集,三个并集之间取交集 node s1; double res=0; for(int i=0;i<2;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++) { s1=jiao(jiao(s[0][i],s[1][j]),s[2][k]); res+=s1.r-s1.l; } return res; } int main() { while(scanf("%lf",&D)!=EOF) { if(D==-1) break; double ans=0; for(int i=0;i<12;i++) { for(int j=0;j<60;j++) ans+=solve(i,j);//i小时j分钟 } printf("%.3f\n",100.0ans/(6060*12)); } return 0; }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档