torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

AtCoder Beginner Contest 184, B : Quizzes

問題概要

 クイズをしていて,正答で $+1$ 点,誤答は $-1$ 点が加算される.$0$ 点のときに誤答しても点数は負にはならない.
 今 $X$ 点もっていて,この状態から続く $N$ 問の正誤判定が与えられる.最終的な得点を求めよ.

制約

  • $1 \leq N \leq 10^5$
  • $0 \leq X \leq 10^5$

解法

 愚直にシミュレーションすることで,問題を解くことができます.$0$ 点か否かに関わらず $+1$/$-1$ してから,$\max( 0, * )$ で更新してあげると見かけの場合分けが無くなってすっきりします.

コード

main = do
	[ _, x ] <- readInts
	s <- getLine
	print $ solve x s

solve x [] = x
solve x (c:s) = solve nx s
	where nx = max 0 $ ( if c == 'o' then succ else pred ) x