最近就只有早起做题,做完就上课,周六日可以做些恶心点点的,平时要上课就只有做做DP,数学题什么的了。
HDU1006,十分恶心的一题,实际上我还不是很懂,看着kuangbin大神的代码基本对着拍,没有什么改进。
题目的意思就是时钟里有三条针,时分秒针,两两超过D度就开心,问一天有百分只几是开心的。
思路就是:模拟,区间交,关键,精度问题,这个针算是连续的~不是60秒动一下分针!
/*************************************************************************
> OS : Linux 3.2.0-60-generic #91-Ubuntu
> Author : yaolong
> Mail : dengyaolong@yeah.net
> Created Time: 2014年05月24日 星期六 07:18:50
************************************************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
struct segment{
double l,r;
segment(){}
segment(double lt,double rt){
l=lt;
r=rt;
}
segment(const segment & s){
l=s.l;
r=s.r;
}
};
double D;
segment intersect(segment a,segment b){
segment 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;
}
segment solve(double a,double b){
//D<=a*x+b<=360-D,求出最大区间[l,r]
segment p;
if(a>0){
p.l=(D-b)/a;
p.r=(360-D-b)/a;
}else{
p.r=(D-b)/a;
p.l=(360-D-b)/a;
}
segment s(0,60);
return intersect(s,p);
}
double cal(int h,int m){