or1ko's diary

日々を書きます

3298 Antimonotonicity

ちょっと早いですが今週のPKUです。

import java.util.*;
public class Main{
  static{
    Scanner s=new Scanner(System.in);
    s.next();
    for(int n,x,y,c;(n=s.nextInt())>0;System.out.println(c))
      for(x=c=1;n-->0;x=y)
        c=c%2!=1^x>(y=s.nextInt())?c+1:c;
  }
}

簡単な処理だったので、Haskellの練習もかねて...後で追記。

追記。odzさんの指摘を適用すると、1バイト減りますね。やっふぉーい。
for文の終了条件が怪しいというのは、たぶん(n=s.nextInt())>0のことだと思いますが、怪しいというか、例外(NoSuchElementException)がでます。
でもこの問題は、最後に例外を投げてもPKU的にはAcceptされる問題なのでOKです。

追記2.
練習としてHaskellでも書いてみた.PKUには提出できません.基本的にはアルゴリズムは同じ.

main :: IO ()
main = do s <- getContents
          putStr . unlines . map show . map problem . drop 1 $ lines s

problem :: String -> Int
problem s = maxMary 0 1 . map read . drop 1 $ words s

maxMary :: Int -> Int -> [Int] -> Int
maxMary t c [] = c
maxMary t c (x:xs) = if ((mod c 2) == 0) /= (t > x) then 
                     maxMary x (c + 1) xs 
                 else
                     maxMary x c xs