acm--1006
//用角速度考虑解决问题
#include <cstdio>
#include <math.h>
#include <iostream>
#include <algorithm>
#define V_SEC 6.0 //秒针角速度
#define V_MIN 0.1 //分针角速度
#define V_HOU 1.0/120 //时针角速度
#define A_SEC s*6 //秒针角度
#define A_MIN m*6+s*0.1 //分针角度
#define A_HOU h*30+m*0.5+s/120.0 //时针角度
using namespace std;
struct interval { //区间
double l; //left
double r; //right
};
double Angle; //角度
int s=0; //秒数
interval solve(double v,double a) { //解方程
//Angle<=v*t+a<=360-Angle;,并且和[0,60]取交集
interval p;
if(v>0) {
p.l=(Angle-a)/v;
p.r=(360-Angle-a)/v;
} else {
p.l=(360-Angle-a)/v;
p.r=(Angle-a)/v;
}
if(p.l< 0)p.l= 0;
if(p.r>60)p.r=60;
if(p.l>=p.r)p.l=p.r=0;
return p;
}
interval jiao(interval a,interval b) {
interval 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 happytime(int h,int m) { //计算h时m分 满足题意的秒数
double v_diff;//速度差
double a_diff;//角度差
interval s0[3][2];
interval s1;
/*解方程 Angle<=|hh-mm|<=360-Angle*/
v_diff=V_HOU-V_MIN;
a_diff=A_HOU-A_MIN;//时针分针夹角
s0[0][0]=solve( v_diff, a_diff);
s0[0][1]=solve(-v_diff,-a_diff);
/*解方程 Angle<=|hh-ss|<=360-Angle*/
v_diff=V_HOU-V_SEC;
a_diff=A_HOU-A_SEC;//时针秒针夹角
s0[1][0]=solve( v_diff, a_diff);
s0[1][1]=solve(-v_diff,-a_diff);
/*解方程 Angle<=|mm-ss|<=360-Angle*/
v_diff=V_MIN-V_SEC;
a_diff=A_MIN-A_SEC;//分针秒针夹角
s0[2][0]=solve( v_diff, a_diff);
s0[2][1]=solve(-v_diff,-a_diff);
/*
六个区间,选三个取交集
因为绝对值的式子得到的两个区间要并,而三个不同表达式
的区间要交,故这样做
*/
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(s0[0][i],s0[1][j]),s0[2][k]);
res+=s1.r-s1.l;
}
return res;
}
int main() {
int h,m;
while(scanf("%lf",&Angle)) {
if(Angle==-1)break;
double res=0;
for(h=0; h<12; h++)
for(m=0; m<60; m++)
res+=happytime(h,m);
printf("%.3lf\n",res*100.0/43200);
}
}
//没有找到恰当的方法解决问题,思考角度不够
acm--1006的更多相关文章
- 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 武汉科技大学ACM:1006: 我是老大
Problem Description 今年是2021年,正值武汉科技大学 ACM俱乐部成立10周年.十周年庆祝那天,从ACM俱乐部走出去的各路牛人欢聚一堂,其乐融融.庆祝晚会上,大家纷纷向俱乐部伸出 ...
- 武汉科技大学ACM:1006: 华科版C语言程序设计教程(第二版)例题4.17
Problem Description 输入一个整数,求它的素数因子.并按照格式输出. Input 一个整数n.(2<=n<=100) Output n=a*b*c*... (a,b,c为 ...
- 武汉科技大学ACM :1006: 华科版C语言程序设计教程(第二版)习题7.15
Problem Description 输入n个字符串(n<=100),输出其中最长的串,如果有多个则取最先找到的那一个. Input 多组测试数据. 每组测试数据第一行包含一个整数n,表示一共 ...
- 武汉科技大学ACM :1006: 零起点学算法25——求两点之间的距离
Problem Description 输入平面坐标系中2点的坐标,输出它们之间的距离 Input 输入4个浮点数x1 y1 x2 y2,分别是点(x1,y1) (x2,y2)的坐标(多组数据) Ou ...
- 武汉科技大学ACM :1006: A+B for Input-Output Practice (VI)
Problem Description Your task is to calculate the sum of some integers. Input Input contains multipl ...
- ACM学习历程—BestCoder 2015百度之星资格赛1006 单调区间(组合数学)
Problem Description 百小度最近在逛博客,然后发现了一个有趣的问题. 如下图所示,是一个12 位数014326951987 , 它的数字先逐渐变大, 然后变小,再变大,接着变小,又变 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- 【转】ACM博弈知识汇总
博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍 ...
- acm数学(转)
这个东西先放在这吧.做过的以后会用#号标示出来 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能 ...
随机推荐
- BootStrap:
BootStrap: * 响应式的HTML,CSS,JS的框架. * 响应式设计: * 设计一套页面,适配不同的设备,在手机,PAD,PC端都能够正常浏览. * 响应式原理: * 使用CSS3的媒体查 ...
- <Android Framework 之路>BootAnimation(2)
前言 上一篇主要讲解了BootAnimation是从何而来,如何启动,从开机,到SurfaceFlinger服务起来,然后到执行开机动画,如果要深入的看里面的代码,是需要花一定的时间的,我们旨在了解大 ...
- Web.py报错:OSError: No socket could be created -- (('0.0.0.0', 8080):
web.py报错 Python代码: import web urls = ( '/(.*)', 'hello' ) app = web.application(urls, globals()) cla ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之建立活动目录域、DNS服务器和Windows故障转移群集(准备工作)
因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...
- java、C语言实现数组模拟栈
java: public class ArrayStack { private int[] data; private int top; private int size; public ArrayS ...
- leetcode-distinct sequences
Solution: when see question about two strings , DP should be considered first. We can abstract this ...
- ubuntu16.04下无法连接网络的bug
首先介绍下Bug的情况,这个bug纠缠我整整一天,在命令行下ifconfig能够看到ip地址,不过我的不是eth0,而是enps03,然后Ping 本机和ping 网关都能够 ping 通,但是sud ...
- AJAX原生JavaScript写法
GET方式 //创建XMLHttpRequest对象,为考虑兼容性问题,老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象 var ajax = windo ...
- Hadoop学习---Hadoop的深入学习
Hadoop生态圈 存储数据HDFS(Hadoop Distributed File System),运行在通用硬件上的分布式文件系统.具有高度容错性.高吞吐量的的特点. 处理数据MapReduce, ...
- C与C++混编
了解一下C与C++如何合作,gcc和g++编译出来的东西有什么区别. 工具使用 objdump是个好工具,可以用于查看.o文件的内容,也可以查看可执行文件的内容. 查看符号表 objdump -t f ...