続いてDiv2 Medium。Div1 Mediumと近い問題。
http://community.topcoder.com/stat?c=problem_statement&pm=12343
===
赤緑青のボールの個数が与えられ、赤緑青の順で1個ずつボールを減らしていったとき、K個目のボールの色を答える。
- Kが最少のボールの3倍より小さいなら、K%3で決まる
- それより大きい場合、残されたKが残りの2色の小さい方の数より小さいなら、K%2で決まる
- それよりKが大きいなら、最多の色になる
class AlternateColors { public: string getColor(long long r, long long g, long long b, long long k) { long long m=min(min(r,g),b); if(k<=3*m) { if(k%3==1) return string("RED"); if(k%3==2) return string("GREEN"); if(k%3==0) return string("BLUE"); } k-=3*m; r-=m; g-=m; b-=m; if(b==0) { if(k<=2*min(r,g)) return string((k%2)?"RED":"GREEN"); return string((r>=g)?"RED":"GREEN"); } if(g==0) { if(k<=2*min(r,b)) return string((k%2)?"RED":"BLUE"); return string((r>=b)?"RED":"BLUE"); } if(r==0) { if(k<=2*min(g,b)) return string((k%2)?"GREEN":"BLUE"); return string((g>=b)?"GREEN":"BLUE"); } }
まとめ
Div1と合わせてシンプルながら面白い問題。