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;
}

  

posted on 2015-10-04 18:35  wzb_hust  阅读(123)  评论(0编辑  收藏  举报

导航