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

AOJ再挑戦101~105」(2014/02/06 (木) 11:54:14) の最新版変更点

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

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

*問101 Aizu PR http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0101 文字列の置き換えを実装する問題。 解法 一行丸ごと読み込んであとはstrstrで探して文字を置き換えるだけです。 文字数が同じだからこそできる手抜きテクニックです。 #include<stdio.h> #include<string.h> int main(){ int n; char c; scanf("%d%c",&n,&c); while(n--){ char text[1001],*ptr; scanf("%[^\n]%c",text,&c); for(ptr=strstr(text,"Hoshino");ptr!=NULL;ptr=strstr(ptr,"Hoshino")){ ptr[6]='a'; ptr++; } printf("%s%c",text,c); } } *問102 Matrix-like Computation http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0102 簡単な集計を行う問題。 解法 書くだけ。 #include<stdio.h> void calc(int n){ int colSum[11]={0},rowSum,v; for(int y=0;y<n;y++){ rowSum=0; for(int x=0;x<n;x++){ scanf("%d",&v); rowSum+=v; colSum[x]+=v; printf("%5d",v); } printf("%5d\n",rowSum); } rowSum=0; for(int x=0;x<n;x++){ printf("%5d",colSum[x]); rowSum+=colSum[x]; } printf("%5d\n",rowSum); } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0)break; calc(n); } } *問103 Baseball Simulation http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0103 簡易ベースボールのデータから得点を計算する問題 解法 指定通り実装するだけ。 コードの短さ1位はジャッジデータが流出しているとしか考えられない。 それより下の上位の人は魔法の呪文みたいなコードを書いていた。 #include<stdio.h> int main(){ int n; scanf("%d",&n); while(n--){ int Run=0,out=0,score=0; char com[10]; while(out<3){ scanf("%s",com); if(com[1]=='O'){ score+=Run+1; Run=0; }else if(com[1]=='I'){ Run++; if(Run>3){ Run=3; score++; } }else{ out++; } } printf("%d\n",score); } } *問104 Magical Tiles http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0104 ドラクエの魔法の床を題材にした問題。 解法 指定通り実装 #include<stdio.h> const char LOOP='x'; int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(w==0&&h==0)break; char map[102][102]; for(int y=0;y<h;y++){ scanf("%s",map[y]); } int x=0,y=0; while(map[y][x]!='.'&&map[y][x]!=LOOP){ char c=map[y][x]; map[y][x]=LOOP; if(c=='>')x++; if(c=='<')x--; if(c=='v')y++; if(c=='^')y--; } if(map[y][x]==LOOP)printf("LOOP\n"); else printf("%d %d\n",x,y); } } *問105 本に単語が出てくるページのデータから索引を出力する問題。 解法 コンテナを使って素朴に実装しました。 #include<stdio.h> #include<string> #include<iostream> #include<map> #include<set> int main(){ std::map<std::string,std::set<int> > memo; std::map<std::string,std::set<int> >::iterator mIt; std::set<int>::iterator sIt; std::string str; int page; char word[50]; while(scanf("%s %d",word,&page)!=EOF){ str=word; memo[str].insert(page); } for(mIt=memo.begin();mIt!=memo.end();mIt++){ std::cout<<(*mIt).first<<"\n"; bool f=true; for(sIt=(*mIt).second.begin();sIt!=(*mIt).second.end();sIt++){ if(f){ f=false; }else{ std::cout<<" "; } std::cout<<(*sIt); } std::cout<<"\n"; } }
*問101 Aizu PR http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0101 文字列の置き換えを実装する問題。 解法 一行丸ごと読み込んであとはstrstrで探して文字を置き換えるだけです。 文字数が同じだからこそできる手抜きテクニックです。 #include<stdio.h> #include<string.h> int main(){ int n; char c; scanf("%d%c",&n,&c); while(n--){ char text[1001],*ptr; scanf("%[^\n]%c",text,&c); for(ptr=strstr(text,"Hoshino");ptr!=NULL;ptr=strstr(ptr,"Hoshino")){ ptr[6]='a'; ptr++; } printf("%s%c",text,c); } } *問102 Matrix-like Computation http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0102 簡単な集計を行う問題。 解法 書くだけ。 #include<stdio.h> void calc(int n){ int colSum[11]={0},rowSum,v; for(int y=0;y<n;y++){ rowSum=0; for(int x=0;x<n;x++){ scanf("%d",&v); rowSum+=v; colSum[x]+=v; printf("%5d",v); } printf("%5d\n",rowSum); } rowSum=0; for(int x=0;x<n;x++){ printf("%5d",colSum[x]); rowSum+=colSum[x]; } printf("%5d\n",rowSum); } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0)break; calc(n); } } *問103 Baseball Simulation http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0103 簡易ベースボールのデータから得点を計算する問題 解法 指定通り実装するだけ。 コードの短さ1位はジャッジデータが流出しているとしか考えられない。 それより下の上位の人は魔法の呪文みたいなコードを書いていた。 #include<stdio.h> int main(){ int n; scanf("%d",&n); while(n--){ int Run=0,out=0,score=0; char com[10]; while(out<3){ scanf("%s",com); if(com[1]=='O'){ score+=Run+1; Run=0; }else if(com[1]=='I'){ Run++; if(Run>3){ Run=3; score++; } }else{ out++; } } printf("%d\n",score); } } *問104 Magical Tiles http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0104 ドラクエの魔法の床を題材にした問題。 解法 指定通り実装 #include<stdio.h> const char LOOP='x'; int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(w==0&&h==0)break; char map[102][102]; for(int y=0;y<h;y++){ scanf("%s",map[y]); } int x=0,y=0; while(map[y][x]!='.'&&map[y][x]!=LOOP){ char c=map[y][x]; map[y][x]=LOOP; if(c=='>')x++; if(c=='<')x--; if(c=='v')y++; if(c=='^')y--; } if(map[y][x]==LOOP)printf("LOOP\n"); else printf("%d %d\n",x,y); } } *問105Book Index http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0105 単語が出てくるページのデータから本の索引を出力する問題。 解法 コンテナを使って素朴に実装しました。 #include<stdio.h> #include<string> #include<iostream> #include<map> #include<set> int main(){ std::map<std::string,std::set<int> > memo; std::map<std::string,std::set<int> >::iterator mIt; std::set<int>::iterator sIt; std::string str; int page; char word[50]; while(scanf("%s %d",word,&page)!=EOF){ str=word; memo[str].insert(page); } for(mIt=memo.begin();mIt!=memo.end();mIt++){ std::cout<<(*mIt).first<<"\n"; bool f=true; for(sIt=(*mIt).second.begin();sIt!=(*mIt).second.end();sIt++){ if(f){ f=false; }else{ std::cout<<" "; } std::cout<<(*sIt); } std::cout<<"\n"; } }

表示オプション

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