yukicoder openに参加。前半の早解きのおかげで上々の順位だが、Alice and Graphが解けなかったのが残念。
http://yukicoder.me/problems/148
http://yukicoder.me/problems/179
http://yukicoder.me/problems/209
No.88 次はどっちだ
オセロの盤面と、先手の名前が与えられる。
次の手番はどちらか。
石の数の偶奇を見れば、次の手番がどちらかわかる。
string P,S[10]; int num; void solve() { int i,j,k,l,r,x,y; string s; cin>>P; j=0; FOR(y,8) { cin>>S[y]; FOR(x,8) j+=S[y][x]!='.'; } if(j%2==0 ^ P=="oda" ^ 1) cout<<"oda"<<endl; else cout<<"yukiko"<<endl; }
No.89 どんどんドーナツどーんといこう!
ドーナツの単位体積当たりのカロリーCと、ドーナツが2つの同心円に見える向きで見たときの内側と外側の円の半径Rin,Routが与えられる。
このドーナツの総カロリーを求めよ。
ヒント通りパップス・ギュルダンの定理を用いればよい。
断面積は((Rin-Rout)/2)^2*π、重心の回転距離は((Rin-Rout)/2)*2*πとなる。
int C,I,O; void solve() { int i,j,k,l,r,x,y; string s; cin>>C>>I>>O; double pi=atan(1)*4; double han=(O-I)/2.0; double ret=((I+O)/2.0)*2*pi*(han*han*pi)*C; _P("%.12lf\n",ret); }
No.90 品物の並び替え
0~(N-1)番のN個の商品を並べる。
item1[i]番の商品がitem2[i]番の商品の前にあると、score[i]点を得ることができる。
商品を並べ替えて得られる最高得点を求めよ。
Nが9以下と小さいので、next_permutationで総当たりすればよい。
int N,M; int I[2][1000],S[1000]; int mat[100][100]; int V[10]; void solve() { int i,j,k,l,r,x,y; string s; cin>>N>>M; FOR(i,M) { cin>>I[0][i]>>I[1][i]>>S[i]; mat[I[0][i]][I[1][i]]=S[i]; } FOR(i,N) V[i]=i; int ma=0; do { int sc=0; FOR(x,N) FOR(y,x) sc+=mat[V[y]][V[x]]; ma=max(ma,sc); } while(next_permutation(V,V+N)); cout<<ma<<endl; }
まとめ
このあたりはまだまだ余裕。