結果

問題 No.562 超高速一人かるた small
ユーザー 6soukiti296soukiti29
提出日時 2017-08-26 08:50:38
言語 Nim
(2.0.2)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,270 bytes
コンパイル時間 780 ms
コンパイル使用メモリ 65,492 KB
最終ジャッジ日時 2024-04-27 02:29:35
合計ジャッジ時間 1,261 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
/home/judge/data/code/Main.nim(36, 14) Error: undeclared identifier: 'countBits32'
candidates (edit distance, scope distance); see '--spellSuggest': 
 (4, 4): 'countIt'

ソースコード

diff #

import sequtils,strutils,math

const
    Mo : int64 = 1_000_000_007
var
    N = stdin.readline.parseInt
    s : string
    S = newSeq[string](0)
    dp : array[1100_000, int64]
    P : array[21,int64]
    ans : array[21, int64]
    cnts : array[21, int64]
    lcm : array[21, array[21,int64]]

P[0] = 1
for i in 1..20:
    P[i] = P[i - 1] * i

for n in 1..N:
    s = stdin.readline & " "
    S.add(s)

for i,s1 in S:
    for j,s2 in S:
        if i == j:
            continue
        for k in 0..min(s1.high,s2.high):
            if s1[k] != s2[k]:
                lcm[i][j] = k + 1
                lcm[j][i] = k + 1
                break 
                

for i in 0..<(1 shl N):
    #echo i, " ",countBits32(i.int32), " ",dp[i]
    var bc = countBits32(i.int32)
    ans[bc] = (ans[bc] + dp[i]) mod Mo
    
    for k in 0..<N:
        cnts[k] = 1
        
    for k in 0..<N:
        if (i and (1 shl k)) == 0:
            for j in (k + 1)..<N:
                if (i and (1 shl j)) == 0:
                    cnts[k] = max(cnts[k], lcm[k][j])
                    cnts[j] = max(cnts[j], lcm[k][j])
                    
    for k in 0..<N:
        if (i and (1 shl k)) == 0:
            dp[i + (1 shl k)] += (dp[i] + cnts[k] * P[bc]) mod Mo
for i in 1..N:
    echo ans[i]
0