题解
2023-04-30 19:37:28
发布于:天津
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <cstdio>
/*
经过一段时间,分针与时针的位置关系无非这几种
1.之间的间距变小了
2.之间的间距变大了
3.分针超过了时针,也就是分针曾与时针重合
第一种情况是最后角度最小
第二种情况是最开始角度最小
第三种情况最小角度就是0
剩下的注释看下面
/
using namespace std;
const int N=1,inf=2147483647;
double n,m,x,y,k,ans;//n,m,x,y,k的含义就是题里的
double ha,hb,ma,mb;//这四个变量代表的是从0点钟到某根针顺指针转过的角度与周角(360)的比
//h时针,m分针,a是之前,b是之后
double ca,cb;
int main(){
scanf("%lf%lf%lf%lf%lf",&n,&m,&x,&y,&k);
//计算最开始两针走过的角度
ha=x/n+1/ny/m;
ma=y/m;
//加上k之后两针的角度
y+=k;
hb=x/n+1/n*y/m;
mb=y/m;
//如果经过,即最开始分针在时针后面,之后到时针前面了
//或者分针本来就在前面,但又转回经过时针,就是0
if(ma<ha&&mb>hb||(ma>ha&&mb>1&&mb-1>hb))ans=0;
else{
//如果没有经过,分别计算之前和之后的角度,输出最小的
//注意我们要输出那个小于180度的角
ca=abs(ha-ma);
if(ca>0.5)ca=1-ca;
cb=abs(hb-mb);
if(cb>0.5)cb=1-cb;
ans=ca<cb?ca:cb;
}
printf("%d",int((ans+1e-4)*360));
return 0;
}
这里空空如也
有帮助,赞一个