wvogel日記

自分用の技術備忘録が多めです.

codeforces修正

二つ前の記事で、
解いたと思っていた問題。
今日通してみると、誤っていることが判明しました。


なので素直に書きなおしてみた。

main = do nab <- getLine
          let (n:a:b:_) = map read $ words nab
          print $ length
              $ filter ((==n-1).f) [(x,y) | x <- [a..n],y<-[0..b]]
          where
            f = \(x,y) -> x+y

このソースコードで通すと今度はちゃんとAccepted。


問題はこちら

つまり、求める答えとしては、合計でn人の人間がいて、
左側にはa人以上、右側にはb人以下いるのだから、リスト内包表記で全ての組み合わせを列挙し、

(右側人数)+(左側人数)=n-1

となるタプル数を数えればいいのです。


問題によると、nは高々100ですから、この方法でも十分間に合います。