LoginSignup
1
0

More than 5 years have passed since last update.

ABC094 in Haskell

Posted at

A

そのまま。

a.hs
main = do
   [a,b,x] <- map read . words <$> getLine :: IO [Int]
   putStrLn $ if a+b>=x && a<=x then "YES" else "NO"

B

そのまま。

b.hs
import Data.List

main = do
  [n,m,x] <- map read . words <$> getLine :: IO [Int]
  al <- map read . words <$> getLine :: IO [Int]
  print $ solve al x

solve al x =
  let (f,s) = (span (< x) al) in
    minimum $ map (length) [f,s]

C

時間がなくて(!!)を用いてしまった。
(n>1. 0<=n/2-1<n/2<=n-1)

c.hs
import Data.List

main = do
  n <- read <$> getLine::IO Int
  xs <- map read . words <$> getLine ::IO [Int]
  let xs_ = sort xs 
  let (m1,m2) = (xs_!!(div n 2-1),xs_!!(div n 2)) 
  mapM_ print $ solve m1 m2 xs

solve _ _ [] = []
solve m1 m2 (x:xs)  =
  (if x<=m1 then m2 else m1) : solve m1 m2 xs

D

パスカルの三角形までは思いついたが実装で時間切れになってしまった。最初は無駄にソートをしてから考えたが、minimumByで実装できた。

d.hs
import Data.List
import Text.Printf

main = do
  _ <- getLine
  as <- map read . words <$> getLine::IO[Int]
  let [n, r] = solve as
  printf "%d %d\n" n r 

solve as =
  [n, r]
  where
    r = minimumBy (\x y -> compare (abs $ n'-x) (abs $ n'-y)) $ delete n as
    n = maximum as
    n' = div n 2

printfを使わないやり方もあった。

putStrLn $ unwords $ map show $ solve as

E

e.hs

F

f.hs
1
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
1
0