結果
| 問題 | 
                            No.2045 Two Reflections
                             | 
                    
| コンテスト | |
| ユーザー | 
                             shobonvip
                         | 
                    
| 提出日時 | 2022-08-20 20:11:10 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 103 ms / 2,000 ms | 
| コード長 | 977 bytes | 
| コンパイル時間 | 330 ms | 
| コンパイル使用メモリ | 82,180 KB | 
| 実行使用メモリ | 79,872 KB | 
| 最終ジャッジ日時 | 2024-10-09 12:02:23 | 
| 合計ジャッジ時間 | 3,392 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 27 | 
ソースコード
from collections import defaultdict
def pfact(m):
	pf = {}
	for i in range(2,int(m**0.5)+1):
		while m%i == 0:
			pf[i] = pf.get(i,0) + 1
			m //= i
	if m>1 : pf[m]=1
	return pf
mod = 998244353
N, p, q = map(int,input().split())
if p == 1 and q == 1:
	print(1)
elif p == 1:
	print(2)
elif q == 1:
	print(2)
elif p + q <= N:
	print(4)
else:
	graph = [0] * 2*N
	# EVEN TO ODD
	for i in range(N):
		if i < p:
			graph[i] = p-1-i + N
		else:
			graph[i] = i + N
	# ODD TO EVEN
	for i in range(N):
		if N-q <= i:
			graph[N + i] = 2*N-q-1-i
		else:
			graph[N + i] = i
	tansaku = [0] * 2*N
	dic = defaultdict(int)
	for st in range(2 * N):
		if tansaku[st] == 0:
			tansaku[st] = 1
			mada = [st]
			s = 1
			while mada:
				i = mada.pop()
				if tansaku[graph[i]] == 0:
					tansaku[graph[i]] = 1
					mada.append(graph[i])
					s += 1
			for i, j in pfact(s).items():
				dic[i] = max(dic[i], j)
	
	ans = 1
	for i, j in dic.items():
		ans = ans * pow(i, j, mod) % mod
	print(ans)
            
            
            
        
            
shobonvip