[Haskell on HackerEarth] Modify Sequence

来源:互联网 发布:编程语言 使用范围 编辑:程序博客网 时间:2024/05/29 03:01

原题链接
输入:一个正整数数组[a_1, a_2…a_n]
操作:任取 0 < i < n,将a_i 和 a_i+1各减1
输出:能否通过有限个操作将数组化为0
思路:每次能减少的是相邻两个数,那么最左边那个元素就只有一种减少方法,将最左边的元素减至0后,左数第二个数就成为新的最左边的元素,

import Data.Functorimport Data.Listimport Data.Charimport qualified Data.ByteString.Char8 as Bmain :: IO()main = do  _ <- getInts  xs <- getInts  putStrLn $ if f xs then "YES" else "NO"f :: [Int] -> Boolf [0] = Truef [x] = Falsef (x:y:xs)  | x > y = False  | otherwise = f ((y-x):xs)getInts :: IO[Int]getInts = unfoldr (B.readInt . B.dropWhile isSpace) <$> B.getLine

PS:
原题的测试集合可能有缺陷,我写了两个算法,对于输入

33 2 1

一个输出 YES,一个输出 NO,但两个算法都过了,我觉得这里应该是NO

0 0
原创粉丝点击