AtCoder Beginner Contest 186 (パナソニックプログラミングコンテスト) E-Throne
AtCoder Beginner Contest 186 (パナソニックプログラミングコンテスト) (ABC-186) E - Throne についての記事です.
問題へのリンク
ABC-186 E Throne
解法
全体で必要なステップ数は,
- Kの倍数であって (つまり,mod K で 0 である)
- mod N で -S である
だから,中国剰余定理で求められる.これを K で割れば答になる.
感想
コンテスト中は,拡張互除法の結果を一生懸命場合分けしていました. 中国剰余定理ってこういうふうに使うんですね.
コード
#include <bits/stdc++.h> #include <cassert> typedef long long int ll; using namespace std; #include <atcoder/math> using namespace atcoder; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); auto solve = [&]() -> ll { ll N, S, K; cin >> N >> S >> K; auto [y, z] = crt(vector<ll>({0, -S}), vector<ll>({K, N})); if (y == 0 && z == 0) return -1; return y / K; }; ll T; cin >> T; for (ll t = 0; t < T; t++) cout << solve() << "\n"; return 0; }