The 2020 ICPC Asia Shenyang Regional Programming Contest I. Rise of Shadows

【题意】

原题

就是给定一个新定义的时钟,时针H小时转一圈,分针M分钟转一圈,问又多少时刻两个针的夹角小于等于$\alpha$,其中$\alpha=\frac{2\pi A}{HM}$

【分析】

这么基础的题目,我考场上竟然交了九发都没过,:(

考虑相对运动,很容易就得到了求有多少$t$,满足$t\in[0,HM)$,st.

$t(H-1) mod  HM \leq A ort(H-1)  modHM \ge HM-A$

同时除以$d=gcd(H-1,HM)$

$\frac{t(H-1)}{d} mod\frac{HM}{d} \leq \frac{A}{d} or \frac{t(H-1)}{d} mod \frac{HM}{d} \ge \frac{HM-A}{d}$

这样我们就得到了第一个方程有$\frac{A}{d}+1$个解,第二个有$\frac{A}{d}$个解

这样总个数为$d(2\lfloor\frac{A}{d}\rfloor+1)$

 

但是,要注意当$A=\frac{HM}{2}$的时候要特判,答案为$HM$,考场就挂这儿了!!

 

【代码】

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll H,M,A,d;
ll gcd(ll a,ll b)
{
    if(!b) return a;
    return gcd(b,a%b);
}
int main()
{
    //freopen("a.in","r",stdin);
    //freopen("a.out","w",stdout);
    scanf("%lld%lld%lld",&H,&M,&A);
    if(A==H*M/2)
    {
        printf("%lld",H*M);
        return 0;
    }
    d=gcd(H-1,H*M);
    printf("%lld",d*(1+2*(A/d)));
    return 0;
}

 

posted @ 2021-08-09 22:16  andyc_03  阅读(254)  评论(1编辑  收藏  举报