「AOJ再挑戦71~75」の編集履歴(バックアップ)一覧はこちら

AOJ再挑戦71~75」(2014/02/02 (日) 16:19:12) の最新版変更点

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

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

*問71 Bombs Chain http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0071 ボン○ーマンもどきの爆発連鎖を扱った問題。 解法 再帰以外思いつかなかった。 #include<stdio.h> #include<string.h> int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; bool inArea(int x,int y){ return (0<=x) && (x<8) && (0<=y) && (y<8); } void chain(char map[8][9],int x,int y){ map[y][x]='0'; for(int i=0;i<4;i++){ for(int j=1;j<=3;j++){ int nx=x+dx[i]*j; int ny=y+dy[i]*j; if(inArea(nx,ny)&&map[ny][nx]=='1'){ chain(map,nx,ny); } } } } void calc(int turn){ char map[8][9]; for(int i=0;i<8;i++){ scanf("%s",map[i]); } int sx,sy; scanf("%d %d",&sx,&sy); sx--; sy--; chain(map,sx,sy); printf("Data %d:\n",turn); for(int i=0;i<8;i++){ printf("%s\n",map[i]); } } int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ calc(i); } } *問72Carden Lantern http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0072 街路にランタンを設置する数を最小にする問題。 解法 最小全域木をプリム法で求めるだけです。 #include<stdio.h> #include<vector> #include<queue> #include<string.h> struct S{ int to,cost; bool operator<(const S& s)const{ return cost>s.cost; } }; void calc(int n){ int m,a,b,len; std::vector<S> G[101]; std::priority_queue<S> pq; S s,s1; scanf("%d",&m); for(int i=0;i<m;i++){ scanf("%d,%d,%d",&a,&b,&len); s.cost=len/100-1; s.to=b; G[a].push_back(s); if(a==0)pq.push(s); s.to=a; G[b].push_back(s); if(b==0)pq.push(s); } bool spents[101]; memset(spents,false,sizeof(spents)); spents[0]=true; int count=1,ans=0; while(pq.empty()==false){ s=pq.top(); pq.pop(); if(spents[s.to]==true)continue; spents[s.to]=true; count++; ans+=s.cost; if(count==n)break; for(int i=0;i<G[s.to].size();i++){ s1=G[s.to][i]; if(spents[s1.to]==true)continue; pq.push(s1); } } printf("%d\n",ans); } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0)break; calc(n); } } *問73 Surface Area of Quadrangular Pyramid http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0073 底が正方形の四角垂の表面積を求めよという問題。 解法 (h*x)/2の三角形を射影して引き延ばすと側面の三角形の計算式が出てくるって話。 #include<stdio.h> #include<math.h> int main(){ double x,h; while(1){ scanf("%lf %lf",&x,&h); if(x==0&&h==0)break; printf("%.7lf\n",x*sqrt(x*x+4*h*h)+x*x); } } *問74 Videotape http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0074 ビデオテープの残り時間を表示する問題。 秒に直して計算するだけです。 3倍録画なんて今どきの若いのに通じるのだろうか? #include<stdio.h> int main(){ int h,m,s,t; while(1){ scanf("%d %d %d",&h,&m,&s); if(h==-1&&m==-1&&s==-1)break; t=7200-h*3600-m*60-s; printf("%02d:%02d:%02d\n",t/3600,(t%3600)/60,t%60); t*=3; printf("%02d:%02d:%02d\n",t/3600,(t%3600)/60,t%60); } }
*問71 Bombs Chain http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0071 ボン○ーマンもどきの爆発連鎖を扱った問題。 解法 再帰以外思いつかなかった。 #include<stdio.h> #include<string.h> int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; bool inArea(int x,int y){ return (0<=x) && (x<8) && (0<=y) && (y<8); } void chain(char map[8][9],int x,int y){ map[y][x]='0'; for(int i=0;i<4;i++){ for(int j=1;j<=3;j++){ int nx=x+dx[i]*j; int ny=y+dy[i]*j; if(inArea(nx,ny)&&map[ny][nx]=='1'){ chain(map,nx,ny); } } } } void calc(int turn){ char map[8][9]; for(int i=0;i<8;i++){ scanf("%s",map[i]); } int sx,sy; scanf("%d %d",&sx,&sy); sx--; sy--; chain(map,sx,sy); printf("Data %d:\n",turn); for(int i=0;i<8;i++){ printf("%s\n",map[i]); } } int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ calc(i); } } *問72Carden Lantern http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0072 街路にランタンを設置する数を最小にする問題。 解法 最小全域木をプリム法で求めるだけです。 #include<stdio.h> #include<vector> #include<queue> #include<string.h> struct S{ int to,cost; bool operator<(const S& s)const{ return cost>s.cost; } }; void calc(int n){ int m,a,b,len; std::vector<S> G[101]; std::priority_queue<S> pq; S s,s1; scanf("%d",&m); for(int i=0;i<m;i++){ scanf("%d,%d,%d",&a,&b,&len); s.cost=len/100-1; s.to=b; G[a].push_back(s); if(a==0)pq.push(s); s.to=a; G[b].push_back(s); if(b==0)pq.push(s); } bool spents[101]; memset(spents,false,sizeof(spents)); spents[0]=true; int count=1,ans=0; while(pq.empty()==false){ s=pq.top(); pq.pop(); if(spents[s.to]==true)continue; spents[s.to]=true; count++; ans+=s.cost; if(count==n)break; for(int i=0;i<G[s.to].size();i++){ s1=G[s.to][i]; if(spents[s1.to]==true)continue; pq.push(s1); } } printf("%d\n",ans); } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0)break; calc(n); } } *問73 Surface Area of Quadrangular Pyramid http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0073 底が正方形の四角垂の表面積を求めよという問題。 解法 (h*x)/2の三角形を射影して引き延ばすと側面の三角形の計算式が出てくるって話。 #include<stdio.h> #include<math.h> int main(){ double x,h; while(1){ scanf("%lf %lf",&x,&h); if(x==0&&h==0)break; printf("%.7lf\n",x*sqrt(x*x+4*h*h)+x*x); } } *問74 Videotape http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0074 ビデオテープの残り時間を表示する問題。 秒に直して計算するだけです。 3倍録画なんて今どきの若いのに通じるのだろうか? #include<stdio.h> int main(){ int h,m,s,t; while(1){ scanf("%d %d %d",&h,&m,&s); if(h==-1&&m==-1&&s==-1)break; t=7200-h*3600-m*60-s; printf("%02d:%02d:%02d\n",t/3600,(t%3600)/60,t%60); t*=3; printf("%02d:%02d:%02d\n",t/3600,(t%3600)/60,t%60); } } *問75 BMI http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0075 BMI値を計算して25以上の人の生徒番号だけを出力する問題。 解法 何も工夫するところがありません。 #include<stdio.h> int main(){ int no; double kg,m; while(scanf("%d,%lf,%lf",&no,&kg,&m)!=EOF){ if(kg/(m*m)>=25)printf("%d\n",no); } }

表示オプション

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