結果
| 問題 | 
                            No.2045 Two Reflections
                             | 
                    
| コンテスト | |
| ユーザー | 
                             とりゐ
                         | 
                    
| 提出日時 | 2022-08-20 00:38:48 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 125 ms / 2,000 ms | 
| コード長 | 1,349 bytes | 
| コンパイル時間 | 396 ms | 
| コンパイル使用メモリ | 82,432 KB | 
| 実行使用メモリ | 77,692 KB | 
| 最終ジャッジ日時 | 2024-10-08 12:33:22 | 
| 合計ジャッジ時間 | 3,614 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 27 | 
ソースコード
from collections import defaultdict
from math import gcd
class UnionFind():
  def __init__(self,n):
    self.n=n
    self.parents=[-1]*n
  def find(self,x):
    if self.parents[x]<0:
      return x
    else:
      self.parents[x]=self.find(self.parents[x])
      return self.parents[x]
  def union(self,x,y):
    x=self.find(x)
    y=self.find(y)
    if x==y:
      return
    if self.parents[x]>self.parents[y]:
      x,y=y,x
    self.parents[x]+=self.parents[y]
    self.parents[y]=x
  def size(self,x):
    return -self.parents[self.find(x)]
  def same(self,x,y):
    return self.find(x)==self.find(y)
  def members(self,x):
    root=self.find(x)
    return [i for i in range(self.n) if self.find(i)==root]
  def roots(self):
    return [i for i, x in enumerate(self.parents) if x< 0]
  def group_count(self):
    return len(self.roots())
  def all_group_members(self):
    group_members=defaultdict(list)
    for member in range(self.n):
      group_members[self.find(member)].append(member)
    return group_members
n,p,q=map(int,input().split())
p,q=min(p,q),max(p,q)
if p==q==1:
  print(1)
  exit()
if p==1 or p==q==n:
  print(2)
  exit()
uf=UnionFind(n)
for i in range(p):
  uf.union(i,p-1-i)
for i in range(q):
  uf.union(n-q+i,n-1-i)
lcm=1
for i in range(n):
  lcm=lcm*uf.size(i)//gcd(lcm,uf.size(i))
print(lcm*2%998244353)
            
            
            
        
            
とりゐ