117 B Very Interesting Game
問題
三つの数a,b,modが与えられる。二人が次のようなゲームをする。
- 1人目がa以下の数s1を選ぶ。s1は9桁の数で、leading zeroがあっても良い。
- 2人目がb以下の数s2を選ぶ。s2は9桁の数で、leading zeroがあっても良い。
- 文字列s1+s2を数字として見たときにmodで割りきれれば1人目の勝ち、そうでなければ二人目の勝ち。
お互いが最善を尽くしたとき、どちらのプレイヤーが勝つか求めよ。
1人目のプレイヤーが勝つとき、1人目が最初に書くs1のうち辞書順で最小のものを求めよ。
制約条件
a,b≦10^9
mod≦10^7
方針
全探索。
aは辞書順最小のものを求めるので、mod以下のs1についてだけ考えれば良い。
s1が決まると、s2をmodで割った余りが一意に定まる。このうち最小のものだけ考えればいいので、
それがb以下であるかを見る。
それがb以下なら2人目が勝ってしまうので次のs1を見る。
bより大きいなら1人目が勝つので、そのときのs1を出力する。
ソースコード
int a,b,mod; void run(){ cin>>a>>b>>mod; rep(i,min(a+1,mod)){ int rest=((-i*ll(1e9)%mod)+mod)%mod; if(rest>b){ printf("1 %09d\n",i); return; } } puts("2"); }