結果
| 問題 | 
                            No.699 ペアでチームを作ろう2
                             | 
                    
| ユーザー | 
                             norioc
                         | 
                    
| 提出日時 | 2025-03-19 06:52:49 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 200 ms / 1,000 ms | 
| コード長 | 996 bytes | 
| コンパイル時間 | 550 ms | 
| コンパイル使用メモリ | 82,240 KB | 
| 実行使用メモリ | 76,964 KB | 
| 最終ジャッジ日時 | 2025-03-19 06:52:53 | 
| 合計ジャッジ時間 | 3,777 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge1 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 12 | 
ソースコード
def set_pairings(n: int, yield_func):
    assert n > 0 and n % 2 == 0
    def rec(p, t, g):
        if p == n:
            pairs = []
            partners = [-1] * m
            for i in range(n):
                gid = g[i]
                if partners[gid] == -1:
                    partners[gid] = i
                else:
                    pairs.append((partners[gid], i))
            yield_func(pairs)
            return
        for i in range(m):
            x = t[i]
            if x == 2: continue
            t[i] += 1
            g[p] = i
            rec(p+1, t, g)
            t[i] -= 1
            if x == 0: break
    m = n // 2
    t = [0] * m  # 各グループの占領人数
    g = [0] * n  # t[i] : i 番目の人のグループ番号
    rec(0, t, g)
N = int(input())
A = list(map(int, input().split()))
def func(pairs):
    global ans
    res = 0
    for a, b in pairs:
        res ^= (A[a] + A[b])
    ans = max(ans, res)
ans = 0
set_pairings(N, func)
print(ans)
            
            
            
        
            
norioc