結果
問題 | No.43 野球の試合 |
ユーザー |
|
提出日時 | 2017-06-15 14:19:38 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 461 ms / 5,000 ms |
コード長 | 913 bytes |
コンパイル時間 | 141 ms |
コンパイル使用メモリ | 7,424 KB |
実行使用メモリ | 13,184 KB |
最終ジャッジ日時 | 2024-09-25 02:11:14 |
合計ジャッジ時間 | 2,129 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 7 |
コンパイルメッセージ
Syntax OK
ソースコード
N = gets.to_i M = 31 S = N.times.map{ gets[0,N] } mask = 0 last_mask = 0 S.each_with_index{|s, y| s.chars.each_with_index{|c, x| next if y >= x n = y * N + x last_mask |= 1 << 1 * n next if c == ?- # 試合済み mask |= 1 << 1 * n # 勝利 mask |= 1 << 1 * n + M if c == ?o } } f = ->mask{ if (mask & (1 << M) - 1) == last_mask table = [0] * N N.times{|y| N.times{|x| next if y >= x r = mask & (1 << y * N + x + M) > 0 table[y] += 1 if r table[x] += 1 if !r } } table.uniq.sort_by{|v|-v}.index(table[0]) + 1 else N.times{|y| N.times{|x| next if y >= x n = y * N + x # 試合済み next if mask & (1 << n) > 0 lose_mask = mask | (1 << n) win_mask = lose_mask | (1 << n + M) return [f[lose_mask], f[win_mask]].min } } end } p f[mask]