SRM564 Div2 Medium(500) AlternateColors
1ステップずつ処理していては間に合わないので、まとめる。残りのボールの色数で関数を分けると、簡潔に書ける気がする。
#include <string> using namespace std; string solve2( long long c0, long long c1, long long k, string n0, string n1 ) { long long m = min(c0,c1); if ( k<2*m && k%2==0 ) return n0; if ( k<2*m && k%2==1 ) return n1; if ( c0==m ) return n1; if ( c1==m ) return n0; return ""; } string solve3( long long c0, long long c1, long long c2, long long k, string n0, string n1, string n2 ) { long long m = min(c0,min(c1,c2)); if ( k<3*m && k%3==0 ) return n0; if ( k<3*m && k%3==1 ) return n1; if ( k<3*m && k%3==2 ) return n2; if ( c0==m ) return solve2( c1-m+1, c2-m+1, k-3*m+2, n1, n2 ); if ( c1==m ) return solve2( c2-m+1, c0-m, k-3*m+1, n2, n0 ); if ( c2==m ) return solve2( c0-m, c1-m, k-3*m, n0, n1 ); return ""; } class AlternateColors{public: string getColor( long long r, long long g, long long b, long long k ) { return solve3( r, g, b, k-1, "RED", "GREEN", "BLUE" ); }};