HDU 5387.Clockr
我都不知道该如何写题解了。。。 根据时间算出每根针离原点的角度大小,然后减一下即可,要注意处理钝角.
#include<bits/stdc++.h> using namespace std; const int tot=12*60*60; int gcd(int a, int b) { if (b==0) return a; return gcd(b, a%b); } void work(int a1, int b1, int a2, int b2) { int b=b1*b2/gcd(b1,b2),a; a1=b/b1*a1; a2=b/b2*a2; b1=b; b2=b; a=abs(a1-a2); int g=gcd(a,b); if (g==0) { printf("0 "); return; } else { a=a/g; b=b/g; } if (b==1) { if (a>180) a=360-a; printf("%d ",a); } else { if (a>180*b) a=360*b-a; g=gcd(a,b); a=a/g; b=b/g; printf("%d/%d ",a,b); } } int main() { int T,h,m,s; scanf("%d",&T); while(T--) { scanf("%d:%d:%d",&h,&m,&s); if (h>=12) h=h-12; h=h*60*60+m*60+s; m=m*60+s; work(360*h,tot,360*m,60*60); work(360*h,tot,360*s,60); work(360*s,60,360*m,60*60); printf("\n"); } return 0; }