0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HaskellでABC424を解く

Posted at

はじめに

今回はC問題で沼から抜け出せす惨敗でした。

A問題

sortして最初の2つか最後の2つが同じ長さなら2等辺三角形と判断。辺の長さに意味があるかをチェックしたが問題の制約で必ず3角形が存在するので2辺の長さがもう1辺よりも長いというチェックはしなくて良かった。

ABC424A.hs
main = do
  [a,b,c] <- sort <$> readInts
  let cond1 = a == b && a + b > c
  let cond2 = b == c && b + c > a
  putStrLn $ bool "No" "Yes" (cond1 || cond2)

提出

https://atcoder.jp/contests/abc424/submissions/69478466

B問題

Mapの成分にSetを持たせる構造で対応。

ABC424B.hs
main = do
  [n,m,k] <- readInts
  abs <- replicateM k $ do
    [a,b] <- readInts
    return (a,b)
  let mp = M.fromList $ zip [1..] (replicate n IS.empty)
  putStrLn $ unwords $ map show $ solve m mp abs

-- solve :: Int -> M.Map Int IS.IntSet -> [(Int,Int)] -> [Int]
solve m mp [] = []
solve m mp ((a,b):abs)
  | IS.size s2 == m = a : solve m mp2 abs
  | otherwise = solve m mp2 abs
  where
    s = mp M.! a
    s2 = IS.insert b s
    mp2 = M.insert a (trace (show s2) s2) mp

提出

https://atcoder.jp/contests/abc424/submissions/69477255

C問題

最初dfsで解けずUnionFindに変更しだめでbfsでも解けず。。。
コンテスト後に間違いに気づきdfsとbfsでなんとか解けました。

提出(BFS)

事前に作成してあるBFSのテンプレートでは節点nに到達したら終了という条件にしていてこの部分の修正漏れ。

https://atcoder.jp/contests/abc424/submissions/69509050

提出(DFS)

経路上の節点数を全て集めて個数を返してしまっていた。重複点を除去するか別途保持している通過した点の数を数えればよかった。
https://atcoder.jp/contests/abc424/submissions/69509590

おわりに

Dはざっと問題読んでも効率的な実装が思いつかなかったのもありCで粘って撃沈。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?