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