「2321~2330」の編集履歴(バックアップ)一覧はこちら

2321~2330」(2013/01/23 (水) 03:59:35) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*2330 Earth Invasion Diary of Miyabi-sensei http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2330 コピーのドラキュラの中からオリジナルのドラキュラを見つける問題。 偽物金貨の問題と同じなので割り算するだけ。 #include<stdio.h> int main(){ int n,c=0; scanf("%d",&n); n--; while(n!=0){ n/=3; c++; } printf("%d\n",c); } *2331 A Way to Invite Friends http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2331 海に一緒に行く友達の数を決定する問題。 解法 友達を全部集めて2人で行きたい場合、3人で行きたい場合、、、m人で行きたい場合、、、n+1人で行きたい場合と挙手してもらいます。 挙手した人数がm人以上なら、そこからm人になるまで人数を減らせば答えと相成ります。 #include<stdio.h> int add[100002]={0},dell[100002]={0}; int main(){ int sum=1,n,ans=0,a,b; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d %d",&a,&b); add[a]++; dell[b+1]++; } for(int i=1;i<100002;i++){ sum-=dell[i]; sum+=add[i]; if(i<=sum)ans=i; } printf("%d\n",ans-1); }
*2330 Earth Invasion Diary of Miyabi-sensei http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2330 コピーのドラキュラの中からオリジナルのドラキュラを見つける問題。 偽物金貨の問題と同じなので割り算するだけ。 #include<stdio.h> int main(){ int n,c=0; scanf("%d",&n); n--; while(n!=0){ n/=3; c++; } printf("%d\n",c); } *2331 A Way to Invite Friends http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2331 海に一緒に行く友達の数を決定する問題。 解法 友達を全部集めて2人で行きたい場合、3人で行きたい場合、、、m人で行きたい場合、、、n+1人で行きたい場合と挙手してもらいます。 挙手した人数がm人以上なら、そこからm人になるまで人数を減らせば答えと相成ります。 #include<stdio.h> int add[100002]={0},dell[100002]={0}; int main(){ int sum=1,n,ans=0,a,b; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d %d",&a,&b); add[a]++; dell[b+1]++; } for(int i=1;i<100002;i++){ sum-=dell[i]; sum+=add[i]; if(i<=sum)ans=i; } printf("%d\n",ans-1); } *2332 Space-Time Sugoroku Road http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2332 進む戻るのあるすごろくで最短ゴール手数が何手になるか答える問題。 解法 さいころを振った回数の少ないほうから優先して探すという条件のもと一度探索で通ったマスは二度使わないという条件で幅優先探索します。 #include<stdio.h> #include<queue> #include<string.h> int memo[100010],board[100010]; struct S{ int turn,p; bool operator<(const S& s)const{ return turn>s.turn; } }; int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&board[i]); } memset(memo,-1,sizeof(memo)); memo[1]=0; std::priority_queue<S> qu; S s,nextS; s.p=1; s.turn=0; qu.push(s); int ans=-1; while(qu.empty()==false){ s=qu.top(); qu.pop(); if(ans!=-1&&s.turn>ans)break; if(board[s.p]!=0){ int p2=s.p+board[s.p]; if(p2>=n){ if(ans==-1||ans>s.turn)ans=s.turn; } if(memo[p2]!=-1&&memo[p2]<=s.turn)continue; memo[p2]=s.turn; s.p=p2; qu.push(s); }else{ for(int i=1;i<=6;i++){ nextS.p=s.p+i; nextS.turn=s.turn+1; if(nextS.p>=n){ if(ans==-1||ans>nextS.turn)ans=nextS.turn; } if(memo[nextS.p]!=-1&&memo[nextS.p]<=nextS.turn)continue; memo[nextS.p]=nextS.turn; qu.push(nextS); } } } printf("%d\n",ans); }

表示オプション

横に並べて表示:
変化行の前後のみ表示: