結果
| 問題 |
No.2045 Two Reflections
|
| コンテスト | |
| ユーザー |
neterukun
|
| 提出日時 | 2022-08-19 22:14:55 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,696 bytes |
| コンパイル時間 | 384 ms |
| コンパイル使用メモリ | 82,076 KB |
| 実行使用メモリ | 91,764 KB |
| 最終ジャッジ日時 | 2024-10-08 09:03:47 |
| 合計ジャッジ時間 | 3,454 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 WA * 3 |
ソースコード
def gcd(a, b):
while b:
a, b = b, a % b
return a
def lcm(a, b):
return (a * b) // gcd(a, b)
def all_gcd(array):
n = len(array)
ans = array[0]
for i in range(1, n):
ans = gcd(ans, array[i])
return ans
def all_lcm_int(array):
ans = array[0]
for i in range(1, len(array)):
ans = (ans * array[i]) // gcd(ans, array[i])
return ans
def all_lcm_dict(array):
primes = {}
for num in array:
for k in range(2, int(num ** 0.5) + 1):
cnt = 0
while num % k == 0:
cnt += 1
num //= k
if cnt != 0:
if k not in primes:
primes[k] = cnt
else:
primes[k] = max(cnt, primes[k])
if num != 1:
if num not in primes:
primes[num] = 1
return primes
n, p, q = map(int, input().split())
MOD = 998244353
if p + q <= n:
if p == 1 and q == 1:
print(1)
elif p == 1:
print(2)
elif q == 1:
print(2)
else:
print(4)
exit()
a = [i for i in range(n)]
b = [i for i in range(n)]
b[0:p] = b[0:p][::-1]
b[n - q:n] = b[n - q:n][::-1]
nxt_pos = {}
for i in range(n):
nxt_pos[b[i]] = i
visited = [False] * n
ans = 2
ptns = []
for i in range(n):
if visited[i]:
continue
visited[i] = True
ptn = 1
while True:
nxt_i = nxt_pos[i]
if visited[nxt_i]:
break
visited[nxt_i] = True
i = nxt_i
ptn += 1
ptns.append(ptn)
lcms = all_lcm_dict(ptns)
for p in lcms:
cnt = lcms[p]
ans *= pow(p, cnt, MOD)
ans %= MOD
print(ans)
neterukun