結果

問題 No.382 シャイな人たち (2)
コンテスト
ユーザー convexineq
提出日時 2021-01-10 01:42:00
言語 PyPy3
(8.0.0 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
TLE  
実行時間 -
コード長 1,454 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,295 ms
コンパイル使用メモリ 82,160 KB
実行使用メモリ 113,720 KB
最終ジャッジ日時 2026-09-26 11:37:31
合計ジャッジ時間 25,115 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other TLE * 1 -- * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def popcountll(i):
    i -= (i >> 1) & 0x5555555555555555
    i = (i & 0x3333333333333333) + ((i >> 2) & 0x3333333333333333)
    i = (i & 0x0F0F0F0F0F0F0F0F) + ((i>>4) & 0x0F0F0F0F0F0F0F0F)
    i = (i>>32) + (i & 0xFFFFFFFF)
    return ((i * 0x1010101) & 0xffffffff) >> 24

def popcount128(i):
    return popcountll(i>>62) + popcountll(i&0x3FFFFFFFFFFFFFFF)

def maximum_clique_BK(G):
    def dfs(R, P, cnt):
        nonlocal ans,val
        if popcount(P)+cnt <= val: return # 枝刈り
        if P==0:
            if val < cnt:
                val = cnt
                ans = R
            return
        PP = P&~g[(P&-P).bit_length() - 1]
        while PP:
            v = PP&-PP
            vv = v.bit_length() - 1
            dfs(R|v, P&g[vv], cnt+1)
            P ^= v
            PP ^= v
    
    n = len(G)
    #assert n <= 63
    N = 1<<n
    g = [0]*n
    for a in range(n):
        for b in range(n):
            if G[a][b] == 0 and a != b:
                g[a] ^= 1<<b
    ans = val = 0
    popcount = popcountll if n <= 64 else popcount128
    dfs(R=0, P=N-1, cnt=0)
    return ans,val

s = int(input())
MOD = 1000003
s = s*12345%MOD
n = s%120+2
g = [[0]*n for _ in range(n)]
p = s = s*12345%MOD
for i in range(n):
    for j in range(i+1,n):
        s = s*12345%MOD
        if s >= p:
            g[i][j] = g[j][i] = 1
ans, val = maximum_clique_BK(g)
print(val+1)
ans = [i+1 for i,c in enumerate(bin(ans)[2:][::-1]) if c == "1"]
print(*ans)
0