首页 > 代码库 > HDU 5705 Clock 模拟(精度)
HDU 5705 Clock 模拟(精度)
题意:给出时间 HH:MM:SS 角度a 问下一个H和M的角度为a的时刻?
时针每小时30度,每分钟30/60度,每秒1/120 (3600,60,1)
分针每小时360,每分钟6度,每秒6/60,1/10度; (,720,12)避免精度问题全部乘以120
算出h,m初始角度 h,m之间角度为deg=abs(h-m),暴力枚举几秒后deg==a即可,O(T)
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; const double eps=1e-3; const int N=2e5+20; int a; int main() { int cas=1; int h,m,s; while(~scanf("%d:%d:%d",&h,&m,&s)) { cin>>a; a*=120; int sum=h*3600+m*60+s;//总的时间(秒) //h,m初始角度 int hh=sum%(360*120); int mm=(sum*12)%(360*120); int ans=0;//暴力枚举几秒后 while(true) { hh=(hh+1)%(360*120); mm=(mm+12)%(360*120);//分针1秒离散成12度 ans++; int deg=abs(hh-mm);//h,m角度 if(abs(deg-a)<=10)//误差在1度内 break; } int anss=(ans+s)%60; int ansm=((ans+s)/60+m)%60; int ansh=(((ans+s)/60+m)/60+h)%12; printf("Case #%d: %02d:%02d:%02d\n",cas++,ansh,ansm,anss); } return 0; }
HDU 5705 Clock 模拟(精度)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。