土下座しながら探索中

主に競技プログラミング

Codeforces 515 A :Drazil and Date

問題リンク : Problem - 515A - Codeforces

問題概要 :
(x,y)にいる人は(x-1,y) (x,y-1) (x+1,y) (x,y+1) のいずれかに移動できる
初期位置は(0,0)で目的地(a,b)にs回の移動で到達できるか

解法 :
最短で移動してもs回で目的地に到達すらできないならダメ
目的地到達後、どの方向でも良いので1回移動して目的地に戻ってを繰り返し調整可能かどうかで判定

コメント :
intだとオーバーフローするらしい
Int64を使用したらRuntime errorがとれた
まだocamlわからない

コード :

open Scanf;;
open Printf;;

let solve (a,b,s) =
  if ( Int64.add ( Int64.abs a ) ( Int64.abs b ) ) > s then "No"
  else if ( Int64.rem ( Int64.sub ( Int64.add ( Int64.abs a ) ( Int64.abs b ) ) s) 2L ) = 0L then "Yes"
  else "No"    
;;

printf "%s\n" ( let (a,b,s) = scanf " %Ld %Ld %Ld\n" ( fun a b s -> (a,b,s) ) in solve (a,b,s) ) ;;