結果
| 問題 |
No.3365 Prefix and Suffix X
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-17 22:56:44 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
OLE
|
| 実行時間 | - |
| コード長 | 1,831 bytes |
| コンパイル時間 | 394 ms |
| コンパイル使用メモリ | 82,576 KB |
| 実行使用メモリ | 79,984 KB |
| 最終ジャッジ日時 | 2025-11-17 22:57:37 |
| 合計ジャッジ時間 | 52,224 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 1 |
| other | WA * 15 OLE * 15 |
ソースコード
import math
def inv(a, m):
"""法 m における a の逆元
"""
r0, r1 = m, a
x0, x1 = 0, 1
while r1 != 0:
q = r0 // r1
r0, r1 = r1, r0 - q * r1
x0, x1 = x1, x0 - q * x1
# ここでもし r_0 != 1 ならエラー処理をすべき
if x0 < 0:
x0 += m
return x0
T = int(input())
for _ in range(T):
X,M = input().split()
M = int(M)
if len(X) == 3:
if X[0] == X[2]:
res = int(X[0]+X[1]+X[0]+X[1]+X[0])
if res % M == 0:
print(res)
continue
if X[0] == X[1] == X[2]:
res = int(X)
if res % M == 0:
print(res)
continue
res = int(X[0]*4)
if res % M == 0:
print(res)
continue
elif len(X) == 2:
if X[0] == X[1]:
res = int(X)
if res % M == 0:
print(res)
continue
res = int(X[0]*3)
if res % M == 0:
print(res)
continue
else:
res = int(X)
if res % M == 0:
print(res)
continue
# 意味のないコメントアウト
x = int(X)
l = len(X)
print("Debug",x,l,M)
ans = -1
for k in range(2*l,19):
a = -x*(1+10**(k-l))
a %= M
g = math.gcd(10**l,M)
if a % g != 0:
continue
M_ = M//g
print("inv",inv(10**l//g,M_))
c_0 = (a//g)*inv(10**l//g,M_)
print("test",c_0,M//g)
L = (-c_0-1)//M_ + 1
U = (10**(k-2*l)-c_0-1)//M_ + 1
print(k,L,U)
if L != U:
ans = x * 10**(k-l) + (c_0+L*M_) * 10**l + x
break
if ans == -1:
continue
print(ans)