悪くはなかった回。
https://codeforces.com/contest/1603/problem/B
問題
2つの偶数である正整数X,Yが与えられる。
正整数Nのうち、N % X = Y % N となるものを求めよ。
解法
大小関係で分岐する。
- X>Yなら、N=X+Yにしておけば、N%X=Y%N=Yとなる。
- YがXの倍数なら、N=YならY%X=Y%Y=0となる。
- それ以外の場合、N=(X*Floor(Y/X)+Y)/2にしておこう。
- X<YかつYがXの倍数でないので、NはX以上Y未満である。この場合 N%X=Y%N=Y-Nとなる。
int T; ll X,Y; void solve() { int i,j,k,l,r,x,y; string s; cin>>T; while(T--) { cin>>X>>Y; ll N; if(X>Y) { N=(X+Y); } else if(Y%X==0) { N=Y; } else { ll v=X*(Y/X); N=(v+Y)/2; } assert(N%X==Y%N); cout<<N<<endl; } }
まとめ
これは本番もそこまで手間取らなかったな。