【題意】
就是給定一個新定義的時鍾,時針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; }