結果
| 問題 |
No.2128 Round up!!
|
| コンテスト | |
| ユーザー |
AngrySadEight
|
| 提出日時 | 2022-10-31 00:05:19 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,683 bytes |
| コンパイル時間 | 514 ms |
| コンパイル使用メモリ | 70,712 KB |
| 最終ジャッジ日時 | 2025-02-08 16:14:49 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 WA * 5 |
ソースコード
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll my_gcd(ll x, ll y){
ll ret;
if (x < y){
swap(x, y);
}
if (y == 0){
ret = x;
}
else{
ret = my_gcd(y, x % y);
}
return ret;
}
int main(){
ll mod = 998244353;
int T;
cin >> T;
while(T--){
ll X, A, B;
cin >> X >> A >> B;
if (A > B) swap(A, B);
if (A == B){
if (X % B == 0) cout << 1 << endl;
else cout << 2 << endl;
}
else{
//最後に行った操作を操作Bにそろえてから考える
ll XA = ((X + A - 1) / A) * A;
ll XB = ((X + B - 1) / B) * B;
ll XAB = ((XA + B - 1) / B) * B;
//cout << XA << " " << XB << " " << XAB << endl;
ll cnt;
if (XA == XB){
if (X == XA) cout << 1 << endl;
else cout << 2 << endl;
continue;
}
else if (XA < XB){
// X -> XB -> XA -> XAB
if (X == XA) cnt = 2;
else cnt = 3;
X = XAB;
}
else{
// X -> XB
if (X == XB) cnt = 1;
else cnt = 2;
X = XB;
}
if (B % A == 0){
cout << cnt << endl;
continue;
}
ll g = my_gcd(A, B);
//あと何回操作を行えるか?
ll lim = A / g;
ll now = X / B;
ll ans = (lim - now) * 2 + cnt;
cout << ans % mod << endl;
}
}
}
AngrySadEight