UTPC2013に参加。100点問題や部分点稼ぎはできたものの、200点クラスの問題が自力で解けず微妙な順位。
このあたり、自分の実力不足を感じるな…。
http://utpc2013.contest.atcoder.jp/tasks/utpc2013_01
http://utpc2013.contest.atcoder.jp/tasks/utpc2013_02
A - UTPC
4文字のアルファベットで構成された文字列が与えられる。
"UTPC"と各文字の穴の数が一致するか答えよ。
実装するだけ。
void solve() { int f,i,j,k,l,x,y; char hoge[27]="12010000000000111100000000"; y=1; string S; cin>>S; if(hoge[S[0]-'A']!='0') y=0; if(hoge[S[1]-'A']!='0') y=0; if(hoge[S[2]-'A']!='1') y=0; if(hoge[S[3]-'A']!='0') y=0; if(y==1) _P("yes\n"); else _P("no\n"); }
B - 13月
ある暦では、2000+X年はXか月ある。
一般的な暦のY年Z月は、この暦の何年何月か答えよ。
ある年までの合計月数はYの二次式として簡単に求められる。
よって二次方程式を解くか二分探索で何年か求めればよい。
ll tot(ll Y) { return (13+Y-2000)*(Y-2013+1)/2; } void solve() { int f,i,j,k,l,x,y,z; ll Y,M; cin>>Y>>M; M=(Y-2013)*12+M-1; ll L=2013,R=1LL<<31; FOR(i,60) { ll p=(L+R)/2; if(tot(p)<M) L=p; else R=p-1; } for(L=max(L-3,2013LL);L;L++) { if(M-tot(L-1)<L-2000) return _P("%lld %lld\n",L,M-tot(L-1)+1); } }
まとめ
ここまではまだ準備運動で簡単。