結果
| 問題 | No.2045 Two Reflections | 
| コンテスト | |
| ユーザー |  neterukun | 
| 提出日時 | 2022-08-19 22:17:19 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,767 bytes | 
| コンパイル時間 | 423 ms | 
| コンパイル使用メモリ | 82,236 KB | 
| 実行使用メモリ | 92,512 KB | 
| 最終ジャッジ日時 | 2024-10-08 09:08:20 | 
| 合計ジャッジ時間 | 2,879 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 26 WA * 1 | 
ソースコード
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()
if p == 1:
    print(2)
    exit()
if q == 1:
    print(2)
    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)
            
            
            
        