結果
| 問題 | No.179 塗り分け |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-10-22 23:15:22 |
| 言語 | F# (F# 4.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,181 bytes |
| 記録 | |
| コンパイル時間 | 13,384 ms |
| コンパイル使用メモリ | 186,832 KB |
| 実行使用メモリ | 35,200 KB |
| 最終ジャッジ日時 | 2024-10-02 14:52:43 |
| 合計ジャッジ時間 | 16,135 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 WA * 2 |
| other | AC * 24 WA * 16 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.fsproj を復元しました (334 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
let ``No.179 塗り分け`` () =
let bitcount (bit:int) =
let a = (bit &&& 0x55555555) + (bit >>> 1 &&& 0x55555555) in
let b = (a &&& 0x33333333) + (a >>> 2 &&& 0x33333333) in
let c = (b &&& 0x0F0F0F0F) + (b >>> 4 &&& 0x0F0F0F0F) in
let d = (c &&& 0x00FF00FF) + (c >>> 8 &&& 0x00FF00FF) in
(d &&& 0x0000FFFF) + (d >>> 16 &&& 0x0000FFFF)
let bc l = Seq.map bitcount l |> Seq.sum
let arr = stdin.ReadLine().Split(' ')
let H = int(arr.[0])
let W = int(arr.[0])
// '#' と '.' を数値 1 と 0 に変換 (ビットに変換する)。
let read() =
stdin.ReadLine()
|> Seq.mapi (fun i c -> (int(c)%46%34) <<< i)
|> Seq.reduce (|||)
let bits = [ for i in 1..H -> read() ]
let mask = (1 <<< W) - 1
let c1 = bc bits
let p =
if c1 &&& 1 = 1 then 0
else
let c2 = c1/2
let check l = bc l = c2
// 総当たり
// 衝突判定があり、ビットの総数÷2の数になれば一致したとみなす。
let b =
seq { for h in 1..H do for w in 1..W -> h,w }
|> Seq.collect (fun (h,w) ->
let blank = List.init h (fun _ -> 0)
let r = List.map (fun n -> n >>> w &&& mask) bits
let l = List.map (fun n -> n <<< w &&& mask) bits
seq [
yield check r // →
yield check l // ←
yield check ((List.skip h bits)@blank) // ↑
yield check (blank@(List.take (H-h) bits)) // ↓
yield check ((List.skip h r)@blank) // ↗
yield check ((List.skip h l)@blank) // ↖
yield check (blank@(List.take (H-h) r)) // ↘
yield check (blank@(List.take (H-h) l)) // ↙
]
)
|> Seq.exists id
if b then 1 else 0
printfn "%s" ["NO";"YES";].[p]
``No.179 塗り分け`` ()