結果
| 問題 | No.2128 Round up!! |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-07-12 14:41:10 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,004 bytes |
| 記録 | |
| コンパイル時間 | 980 ms |
| コンパイル使用メモリ | 95,600 KB |
| 実行使用メモリ | 86,732 KB |
| 最終ジャッジ日時 | 2026-07-12 14:41:17 |
| 合計ジャッジ時間 | 4,449 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 WA * 5 |
ソースコード
## https://yukicoder.me/problems/no/2128
import math
MOD = 998244353
def calc_gcd(A, B):
"""
正の整数A, Bの最大公約数を計算する
"""
a = max(A, B)
b = min(A, B)
while a % b > 0:
c = a % b
a = b
b = c
return b
def solve(X, A, B):
if A == B:
if X % A == 0:
return 1
else:
return 2
# A <B としても一般性を失わない
if A > B:
A, B = B, A
gcd = calc_gcd(A, B)
x = (X // B) + (1 if X % B > 0 else 0)
diff = (A // gcd) - x
diff %= MOD
diff *= 2
diff %= MOD
if (A // gcd) == x:
b1 = B * (A // gcd)
a_set = {b1, X}
y = (X // A ) + (1 if X % A > 0 else 0)
a = y * A
if X <= a <= b1:
a_set.add(a)
diff += (len(a_set))
diff %= MOD
else:
b1 = B * (A // gcd)
b2 = B * x
a_set = {b1, b2, X}
y = (X // A ) + (1 if X % A > 0 else 0)
a = y * A
if X <= a <= b2:
a_set.add(a)
diff += (len(a_set) - 1)
diff %= MOD
return diff
def solve2(X, A, B):
from collections import deque
passed_set = set()
queue = deque()
queue.append(X)
passed_set.add(X)
while len(queue) > 0:
x =queue.popleft()
x_a = (x // A) + (1 if x % A > 0 else 0)
y_a = x_a * A
if y_a not in passed_set:
passed_set.add(y_a)
queue.append(y_a)
x_b = (x // B) + (1 if x % B > 0 else 0)
y_b = x_b * B
if y_b not in passed_set:
passed_set.add(y_b)
queue.append(y_b)
return len(passed_set)
def main():
T = int(input())
answers = []
for _ in range(T):
X, A, B = map(int, input().split())
ans = solve(X, A, B)
# print(solve2(X, A, B))
answers.append(ans)
for ans in answers:
print(ans)
if __name__ == "__main__":
main()