HDU5276 – YJC tricks time(枚举)

传送门:HDU5276

【题意】YJC给你时针和分针间的夹角,让你告诉他现在是什么时候。
你将以以下格式给出可能的时间:
HH:MM:SS
分别表示小时,分钟,秒(比如:08:30:20)在这里使用12小时制,也就是说时间范围是从00:00:00到11:59:59
另外,YJC不想要太精确的时间,所以当且仅当SS mod 10 = 0,答案才合法。

【分析】利用公式:角度=5.5m-30h;枚举小时和秒数,秒数每次+10,算角度即可复杂度360*12*T,错在忘记考虑角度>180的时候要用360减去,唉,实在太弱了。

【AC CODE】15ms

#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <set>
//#include <unordered_set>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
typedef long long LL;
#define rep(i,a,n) for(int i = a; i < n; i++)
#define repe(i,a,n) for(int i = a; i <= n; i++)
#define per(i,n,a) for(int i = n; i >= a; i--)
#define clc(a,b) memset(a,b,sizeof(a))
const int INF = 0x3f3f3f3f, MOD = 2160000*2;

inline int f(int h, int s)
{
	int ans = abs(1100*s-30*12000*h);
	if(ans > 180*12000)
		ans = 360*12000-ans;
	return ans;
}
int main()
{
#ifdef SHY
	freopen("d:\\1.txt", "r", stdin);
#endif
	int n;
	while(~scanf("%d", &n))
	{
		rep(h,0,12)
		{
			for(int s = 0; s < 3600; s += 10)
			{
				if(n == f(h,s))
					printf("%02d:%02d:%02d\n", h,s/60,s%60);
			}
		}
	}
	return 0;
}

 

发表评论

邮箱地址不会被公开。 必填项已用*标注

请输入正确的验证码