yukicoder No.396 クラス替え
問題概要
省略
解法
2m個で循環するので、mod(2m)で計算してる。modを取った後の値がmより大きいか、小さいかで場合分けして、数字が昇順に並ぶ部分なのか、昇順に並ぶ部分なのかで考えて、何組なのかを考えている。
ミス
1オリジンでやっていてばぐらした。0オリジンでやれば、modとってもすんなり行ける。
コード
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; typedef long long ll; #define rep(i,n) for(int i=0;i<(n);i++) int main(void){ ll n, m; cin >> n >> m; ll x, y; cin >> x >> y; ll mod = 2 * m; ll numx = x % mod; ll numy = y % mod; if(numx > m) numx = 2 * m - numx + 1; if(numx == 0) numx = 1; if(numy > m) numy = 2 * m - numy + 1; if(numy == 0) numy = 1; if(numx % mod == numy % mod) printf("YES\n"); else printf("NO\n"); return 0; }