運よく優勝、だけど本戦参加の人交えると6位だし、1問は自分のブログのコピペなのでまだまだだね。
http://code-festival-2015-final-open.contest.atcoder.jp/tasks/codefestival_2015_final_a
http://code-festival-2015-final-open.contest.atcoder.jp/tasks/codefestival_2015_final_b
http://code-festival-2015-final-open.contest.atcoder.jp/tasks/codefestival_2015_final_c
A - コード川柳
3つの文字列が与えられるので、5-7-5になっているか答えよ。
文字の長さをチェックするだけ。
void solve() { int i,j,k,l,r,x,y; string s; string A,B,C; cin>>A>>B>>C; if(A.size()!=5) return _P("invalid\n"); if(B.size()!=7) return _P("invalid\n"); if(C.size()!=5) return _P("invalid\n"); _P("valid\n"); }
B - ダイスゲーム
N個の6面サイコロを振って和を取るとき、最も登場確率の高い和はいくつか。
同着の値が複数ある場合、最小値を答えよ。
1個の時は1、2個以上の時はfloor(3.5*N)を答えればよい。
int N; void solve() { int i,j,k,l,r,x,y; string s; cin>>N; if(N==1) cout<<1<<endl; else cout<<N*7/2<<endl; }
C - 寿司タワー
寿司N個分の具材、すなわちシャリと具N個ずつが積み重なったタワーがある。
手元にN個の寿司があるので、このタワーを形成したい。
寿司はそのままタワーに重ねても良いし、ひっくり返して重ねても良い。
またシャリと具を分割して、それぞれ別の位置に重ねても良い。
タワーを形成するのに必要な、分割する寿司の数の最小値を答えよ。
タワの下から2つずつ見ていって、2つが異なるなら(分割しない)寿司を乗せればよい。
そうでない場合、下の方の具材は分割したものか調達する。
既に分割した余りがあればそれを使えばいいし、なければ1個新規に分割しよう。
int L; string S; void solve() { int i,j,k,l,x,y; string s; cin>>L>>S; int n0=0,n1=0,r=0; FOR(i,2*L-1) { if(S[i]!=S[i+1]) { i++; } else { if(S[i]=='0') { if(n0) n0--; else r++,n1++; } else { if(n1) n1--; else r++,n0++; } } } cout<<r<<endl; }
まとめ
Bは昨晩のyukicoderの影響で無駄にDPしに行ってタイムロスした。