「aoj10000全部」の編集履歴(バックアップ)一覧はこちら

aoj10000全部」(2013/02/08 (金) 21:32:10) の最新版変更点

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

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

10000番台は競技プログラムの問題を初めて解く方のためのチュートリアル問題しかありません。 中学生プログラマでも解ける問題だけで構成されているのが特徴です。 *10000 Hello World http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10000 ヘローワールドを出力する問題。 #include<stdio.h> int main(){ printf("Hello World\n"); } *10001 X Cubic http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10001 x^3を表示する問題。 #include<stdio.h> int main(){ int x; scanf("%d",&x); printf("%d\n",x*x*x); } *10002 Rectangle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10002 長方形の縦横と周計を表示する問題。 #include<stdio.h> int main(){ int a,b; scanf("%d %d",&a,&b); printf("%d %d\n",a*b,2*a+2*b); } *10003 Small, Large, or Equal http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10003 大小関係を比べて表示する問題。 #include<stdio.h> int main(){ int a,b; scanf("%d %d",&a,&b); printf("a %s b\n",a>b?">":a==b?"==":"<"); } *10004 Sorting Three Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10004 3つの数を小さい順に表示する問題。 #include<stdio.h> #include <algorithm> int main(){ int a[3]; scanf("%d %d %d",&a[0],&a[1],&a[2]); std::sort(a,a+3); printf("%d %d %d\n",a[0],a[1],a[2]); } *10005 Print Many Hello World http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10005 1000個のヘローワールドを表示する問題。 #include<stdio.h> int main(){ int n=1000; while(n--)printf("Hello World\n"); } *10006 Print Test Cases http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10006 複数のデータセットを読み込む法方の練習問題。 #include<stdio.h> int main(){ int n=1,p; while(1){ scanf("%d",&p); if(p==0)break; printf("Case %d: %d\n",n++,p); } } *10007 Swapping Two Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10007 2数を読み込んで小さい順に表示する問題。 #include<stdio.h> int main(){ int a,b,min,max; while(1){ scanf("%d %d",&a,&b); if(a==0&&b==0)break; min=a>b?b:a; max=a>b?a:b; printf("%d %d\n",min,max); } } *10008 A / B Problem http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10008 割り算と余りを表示する問題。 #include<stdio.h> int main(){ int a,b; scanf("%d %d",&a,&b); printf("%d %d %lf",a/b,a%b,(double)a/b); } *10009 Circle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10009 円の面積と演習を出す問題。 #include<stdio.h> #include<math.h> int main(){ double r; scanf("%lf",&r); printf("%lf %lf\n",r*r*M_PI,2.0*r*M_PI); } *10010 Simple Calculator http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10010 四則演算を行う問題。 #include<stdio.h> int main(){ int a,b,c; char s[2]; while(1){ scanf("%d %s %d",&a,s,&b); switch(s[0]){ case '+': c=a+b; break; case '-': c=a-b; break; case '*': c=a*b; break; case '/': c=a/b; } if(s[0]=='?')break; printf("%d\n",c); } } *10011 Reversing Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10011 数列を逆順に表示する問題。 #include<stdio.h> int main(){ int n,i=0,as[101]; scanf("%d",&n); for(;i<n;i++)scanf("%d",&as[i]); i--; for(;i>=0;i--)printf("%s%d",i==n-1?"":" ",as[i]); printf("\n"); } *10012 Print a Rectangle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10012 長方形を出力する問題。 #include<stdio.h> int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(h+w==0)break; while(h--){ for(int x=0;x<w;x++){ printf("#"); } printf("\n"); } printf("\n"); } } *100013 Print a Frame http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10013 枠付きの長方形を出力する問題。 #include<stdio.h> int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(h+w==0)break; for(int y=0;y<h;y++){ for(int x=0;x<w;x++){ printf("%s",y==0||y==h-1||x==0||x==w-1?"#":"."); } printf("\n"); } printf("\n"); } } *10014 Print a Chessboard http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10014 チェック模様を出力する問題。 #include<stdio.h> int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(h+w==0)break; for(int y=0;y<h;y++){ for(int x=0;x<w;x++){ printf("%s",(y+x)%2==0?"#":"."); } printf("\n"); } printf("\n"); } } *10015 Finding Missing Cards http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10015 トランプカードの情報から持ってないトランプのデータを出力する問題。 #include<stdio.h> #include<string.h> int main(){ bool card[4][13]; memset(card,true,sizeof(card)); int n,no; char t,s1[2]; scanf("%d",&n); while(n--){ scanf("%s %d",s1,&no); t=s1[0]; if(t=='S')t=0; if(t=='H')t=1; if(t=='C')t=2; if(t=='D')t=3; card[t][no-1]=false; } char tToN[]={'S','H','C','D'}; for(int i=0;i<4;i++){ t=tToN[i]; for(int j=0;j<13;j++){ if(card[i][j])printf("%c %d\n",t,j+1); } } } *10016 Grading http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10016 生徒の得点データから成績を決める問題。 #include<stdio.h> int main(){ int m,t,r,s; char re; while(1){ scanf("%d %d %d",&m,&t,&r); if(m==-1&&t==-1&&r==-1)break; if(m==-1||t==-1){ re='F'; }else{ s=m+t; if(s>=80){ re='A'; }else if(s>=65){ re='B'; }else if(s>=50){ re='C'; }else if(s>=30){ if(r>=50){ re='C'; }else{ re='D'; } }else{ re='F'; } } printf("%c\n",re); } } *10017 How many ways? この問題は普通に解けばn^2の計算量ですが1~nまでのすべての数を使えることを考えれば、計算量nに落とすことが出来ます。 #include<stdio.h> #include <algorithm> int main(){ int n,x,ans,d; while(1){ scanf("%d %d",&n,&x); if(n==0&&x==0)break; ans=0; for(int a=1;a<=n&&a<x-2;a++){ d=x-a; d=std::min(std::min(a,d),n+1)-(d+2)/2; if(d>0)ans+=d; } printf("%d\n",ans); } } *10018 Toggling Cases http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10018 アルファベットの文字列を大文字を小文字に小文字を大文字にして出力する問題。 ほんの少しだけショートコードで遊んでみる。 #include<stdio.h> int main(){ int t; while(1){ t=getchar(); putchar(t+('A'<=t&&t<='Z')*32-('a'<=t&&t<='z')*32); if(t=='\n')break; } } *10019 Sum of Numbers 各桁の数値を足していく問題。 ショートコードは苦手なのであまりコードが短くならない。 #include<stdio.h> int main(){ int x,s; while((x=getchar()-'0')!=0){ s=x; while((x=getchar())!='\n'){ s+=x-'0'; } printf("%d\n",s); } } *10020 Counting Characters http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10020 アルファベットの出現数を数える問題。 #include<stdio.h> #include<string.h> int main(){ int a[26]; char ch; memset(a,0,sizeof(a)); while(scanf("%c",&ch)!=EOF){ if('a'<=ch&&ch<='z')a[ch-'a']++; if('A'<=ch&&ch<='Z')a[ch-'A']++; } for(int i=0;i<26;i++)printf("%c : %d\n",i+'a',a[i]); } *10021 Finding Minimum String http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10021 与えられた単語の中で、辞書式順序で先頭になるものを出力するプログラムを作成して下さい。 #include<stdio.h> #include<string> #include<iostream> int main(){ std::string w,r; int n; std::cin>>n>>w; while(--n){ std::cin>>r; if(w>r)w=r; } std::cout<<w<<"\n"; } *10022 Finding a Word http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10022 与えられた文章の中に指定された単語がいくつあるか答える問題。 解法 小文字を大文字にするのにSTLを使います。 今日から私もC++コーダからSTLコーダにジョブチェンジ。 ミニゲームくらいは作ったことあるけどきちんとしたプログラムを作ったことはないのでまだまだ私はコーダー。 #include<stdio.h> #include<string> #include<iostream> #include<algorithm> struct ToUpper { char operator()(char c) { return std::toupper(c); } }; int main(){ std::string word,text; std::cin>>word; std::transform(word.begin(),word.end(), word.begin(),ToUpper()); int ans=0; while(1){ std::cin>>text; if(text=="END_OF_TEXT")break; std::transform(text.begin(), text.end(), text.begin(),ToUpper()); if(text==word)ans++; } std::cout<<ans<<"\n"; } *10023 Shuffle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10023 解法 カードの山が100万枚とかになったら別のアルゴリズムが必要ですが、練習問題なのでそのまま実装します。 #include<stdio.h> #include<iostream> #include<string> int main(){ std::string str; int n,h; while(1){ std::cin>>str; if(str=="-")break; std::cin>>n; while(n--){ std::cin>>h; str=str.substr(h)+str.substr(0,h); } std::cout<<str<<"\n"; } } *10024 Distance http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10024 2点間の距離を求める問題。 解法 math.hのhypot関数を使います。 #include<stdio.h> #include<math.h> int main(){ double x,y,x2,y2; scanf("%lf %lf %lf %lf",&x,&y,&x2,&y2); printf("%lf\n",hypot(x-x2,y-y2)); } *10025 三角形の2辺の長さとなす角が与えられるのでその三角形の面積、周長aを底辺とした時の高さを答えよ。 解法 三角形の公式から求めます #include<stdio.h> #include<math.h> int main(){ double a,b,c,sin1,cos1; scanf("%lf %lf %lf",&a,&b,&c); c=c/180.0*M_PI; sin1=sin(c); cos1=cos(c); c=sqrt(a*a+b*b-2*a*b*cos1); printf("%lf\n%lf\n%lf\n",a*b*sin1*0.5,a+b+c,b*sin1); } *10026 Standard Deviation http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10026 標準偏差を計算せよという問題。 解法 提示された式をそのまま計算します。 #include<stdio.h> #include<math.h> void calc(int n){ double s[1001],ave=0,v=0; for(int i=0;i<n;i++){ scanf("%lf",&s[i]); ave+=s[i]; } ave/=n; for(int i=0;i<n;i++){ v+=(s[i]-ave)*(s[i]-ave); } printf("%lf\n",sqrt(v/n)); } int main(){ int n; while(1){ scanf("%d",&n); if(n==0)break; calc(n); } } *10027 Card Game http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10027 カードゲームの得点を求める問題。 解法 std::stringで比較します。 ショートコードくらいしかやることがありませんが私はショートコードは苦手です。 #include<stdio.h> #include<string> #include<iostream> int main(){ int n,a=0,b=0; std::string t,h; scanf("%d",&n); while(n--){ std::cin>>t>>h; t>h?a+=3:t<h?b+=3:a++&b++; } printf("%d %d\n",a,b); } *10028 Sort I http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10028 数字列をソートして表示する問題 解法 std::sortで一発です。 #include<stdio.h> #include<algorithm> int main(){ int n,a[1001]; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&a[i]); std::sort(a,a+n); for(int i=0;i<n;i++)printf("%s%d",i==0?"":" ",a[i]); printf("\n"); } *10029 Sort II http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10029 ソートするサイズが上がっただけです。 解法 領域が足らないので配列を外に出すくらいです。 0.00をたたき出している人たちはすごいですね。 #include<stdio.h> #include<algorithm> int a[1000002]; int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&a[i]); std::sort(a,a+n); for(int i=0;i<n;i++)printf("%s%d",i==0?"":" ",a[i]); printf("\n"); } *10030と10031 Search I http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10030 解法 std::setを使いました。 この問題をコードサイズ100byte以下で書いてる人たちは純粋にすごいですね。 どんなテクを使ったのか想像すらできません。 #include<stdio.h> #include<set> int main(){ std::set<int> nums; int n,q,ans=0,num; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&num); nums.insert(num); } scanf("%d",&q); for(int i=0;i<q;i++){ scanf("%d",&num); ans+=(nums.find(num)!=nums.end()); } printf("%d\n",ans); } *10032 Stacking Blocks I http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10032 スタックを使った練習問題。 解法 std::stackを使うだけです。 #include<stdio.h> #include<stack> int main(){ std::stack<char> s; char text[6],color[6]; while(1){ scanf("%s",text); if(text[0]=='q')break; if(text[1]=='o'){ printf("%c\n",s.top()); s.pop(); } if(text[1]=='u'){ scanf("%s",color); s.push(color[0]); } } }
10000番台は競技プログラムの問題を初めて解く方のためのチュートリアル問題しかありません。 中学生プログラマでも解ける問題だけで構成されているのが特徴です。 *10000 Hello World http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10000 ヘローワールドを出力する問題。 #include<stdio.h> int main(){ printf("Hello World\n"); } *10001 X Cubic http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10001 x^3を表示する問題。 #include<stdio.h> int main(){ int x; scanf("%d",&x); printf("%d\n",x*x*x); } *10002 Rectangle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10002 長方形の縦横と周計を表示する問題。 #include<stdio.h> int main(){ int a,b; scanf("%d %d",&a,&b); printf("%d %d\n",a*b,2*a+2*b); } *10003 Small, Large, or Equal http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10003 大小関係を比べて表示する問題。 #include<stdio.h> int main(){ int a,b; scanf("%d %d",&a,&b); printf("a %s b\n",a>b?">":a==b?"==":"<"); } *10004 Sorting Three Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10004 3つの数を小さい順に表示する問題。 #include<stdio.h> #include <algorithm> int main(){ int a[3]; scanf("%d %d %d",&a[0],&a[1],&a[2]); std::sort(a,a+3); printf("%d %d %d\n",a[0],a[1],a[2]); } *10005 Print Many Hello World http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10005 1000個のヘローワールドを表示する問題。 #include<stdio.h> int main(){ int n=1000; while(n--)printf("Hello World\n"); } *10006 Print Test Cases http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10006 複数のデータセットを読み込む法方の練習問題。 #include<stdio.h> int main(){ int n=1,p; while(1){ scanf("%d",&p); if(p==0)break; printf("Case %d: %d\n",n++,p); } } *10007 Swapping Two Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10007 2数を読み込んで小さい順に表示する問題。 #include<stdio.h> int main(){ int a,b,min,max; while(1){ scanf("%d %d",&a,&b); if(a==0&&b==0)break; min=a>b?b:a; max=a>b?a:b; printf("%d %d\n",min,max); } } *10008 A / B Problem http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10008 割り算と余りを表示する問題。 #include<stdio.h> int main(){ int a,b; scanf("%d %d",&a,&b); printf("%d %d %lf",a/b,a%b,(double)a/b); } *10009 Circle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10009 円の面積と演習を出す問題。 #include<stdio.h> #include<math.h> int main(){ double r; scanf("%lf",&r); printf("%lf %lf\n",r*r*M_PI,2.0*r*M_PI); } *10010 Simple Calculator http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10010 四則演算を行う問題。 #include<stdio.h> int main(){ int a,b,c; char s[2]; while(1){ scanf("%d %s %d",&a,s,&b); switch(s[0]){ case '+': c=a+b; break; case '-': c=a-b; break; case '*': c=a*b; break; case '/': c=a/b; } if(s[0]=='?')break; printf("%d\n",c); } } *10011 Reversing Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10011 数列を逆順に表示する問題。 #include<stdio.h> int main(){ int n,i=0,as[101]; scanf("%d",&n); for(;i<n;i++)scanf("%d",&as[i]); i--; for(;i>=0;i--)printf("%s%d",i==n-1?"":" ",as[i]); printf("\n"); } *10012 Print a Rectangle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10012 長方形を出力する問題。 #include<stdio.h> int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(h+w==0)break; while(h--){ for(int x=0;x<w;x++){ printf("#"); } printf("\n"); } printf("\n"); } } *100013 Print a Frame http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10013 枠付きの長方形を出力する問題。 #include<stdio.h> int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(h+w==0)break; for(int y=0;y<h;y++){ for(int x=0;x<w;x++){ printf("%s",y==0||y==h-1||x==0||x==w-1?"#":"."); } printf("\n"); } printf("\n"); } } *10014 Print a Chessboard http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10014 チェック模様を出力する問題。 #include<stdio.h> int main(){ int h,w; while(1){ scanf("%d %d",&h,&w); if(h+w==0)break; for(int y=0;y<h;y++){ for(int x=0;x<w;x++){ printf("%s",(y+x)%2==0?"#":"."); } printf("\n"); } printf("\n"); } } *10015 Finding Missing Cards http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10015 トランプカードの情報から持ってないトランプのデータを出力する問題。 #include<stdio.h> #include<string.h> int main(){ bool card[4][13]; memset(card,true,sizeof(card)); int n,no; char t,s1[2]; scanf("%d",&n); while(n--){ scanf("%s %d",s1,&no); t=s1[0]; if(t=='S')t=0; if(t=='H')t=1; if(t=='C')t=2; if(t=='D')t=3; card[t][no-1]=false; } char tToN[]={'S','H','C','D'}; for(int i=0;i<4;i++){ t=tToN[i]; for(int j=0;j<13;j++){ if(card[i][j])printf("%c %d\n",t,j+1); } } } *10016 Grading http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10016 生徒の得点データから成績を決める問題。 #include<stdio.h> int main(){ int m,t,r,s; char re; while(1){ scanf("%d %d %d",&m,&t,&r); if(m==-1&&t==-1&&r==-1)break; if(m==-1||t==-1){ re='F'; }else{ s=m+t; if(s>=80){ re='A'; }else if(s>=65){ re='B'; }else if(s>=50){ re='C'; }else if(s>=30){ if(r>=50){ re='C'; }else{ re='D'; } }else{ re='F'; } } printf("%c\n",re); } } *10017 How many ways? この問題は普通に解けばn^2の計算量ですが1~nまでのすべての数を使えることを考えれば、計算量nに落とすことが出来ます。 #include<stdio.h> #include <algorithm> int main(){ int n,x,ans,d; while(1){ scanf("%d %d",&n,&x); if(n==0&&x==0)break; ans=0; for(int a=1;a<=n&&a<x-2;a++){ d=x-a; d=std::min(std::min(a,d),n+1)-(d+2)/2; if(d>0)ans+=d; } printf("%d\n",ans); } } *10018 Toggling Cases http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10018 アルファベットの文字列を大文字を小文字に小文字を大文字にして出力する問題。 ほんの少しだけショートコードで遊んでみる。 #include<stdio.h> int main(){ int t; while(1){ t=getchar(); putchar(t+('A'<=t&&t<='Z')*32-('a'<=t&&t<='z')*32); if(t=='\n')break; } } *10019 Sum of Numbers 各桁の数値を足していく問題。 ショートコードは苦手なのであまりコードが短くならない。 #include<stdio.h> int main(){ int x,s; while((x=getchar()-'0')!=0){ s=x; while((x=getchar())!='\n'){ s+=x-'0'; } printf("%d\n",s); } } *10020 Counting Characters http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10020 アルファベットの出現数を数える問題。 #include<stdio.h> #include<string.h> int main(){ int a[26]; char ch; memset(a,0,sizeof(a)); while(scanf("%c",&ch)!=EOF){ if('a'<=ch&&ch<='z')a[ch-'a']++; if('A'<=ch&&ch<='Z')a[ch-'A']++; } for(int i=0;i<26;i++)printf("%c : %d\n",i+'a',a[i]); } *10021 Finding Minimum String http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10021 与えられた単語の中で、辞書式順序で先頭になるものを出力するプログラムを作成して下さい。 #include<stdio.h> #include<string> #include<iostream> int main(){ std::string w,r; int n; std::cin>>n>>w; while(--n){ std::cin>>r; if(w>r)w=r; } std::cout<<w<<"\n"; } *10022 Finding a Word http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10022 与えられた文章の中に指定された単語がいくつあるか答える問題。 解法 小文字を大文字にするのにSTLを使います。 今日から私もC++コーダからSTLコーダにジョブチェンジ。 ミニゲームくらいは作ったことあるけどきちんとしたプログラムを作ったことはないのでまだまだ私はコーダー。 #include<stdio.h> #include<string> #include<iostream> #include<algorithm> struct ToUpper { char operator()(char c) { return std::toupper(c); } }; int main(){ std::string word,text; std::cin>>word; std::transform(word.begin(),word.end(), word.begin(),ToUpper()); int ans=0; while(1){ std::cin>>text; if(text=="END_OF_TEXT")break; std::transform(text.begin(), text.end(), text.begin(),ToUpper()); if(text==word)ans++; } std::cout<<ans<<"\n"; } *10023 Shuffle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10023 解法 カードの山が100万枚とかになったら別のアルゴリズムが必要ですが、練習問題なのでそのまま実装します。 #include<stdio.h> #include<iostream> #include<string> int main(){ std::string str; int n,h; while(1){ std::cin>>str; if(str=="-")break; std::cin>>n; while(n--){ std::cin>>h; str=str.substr(h)+str.substr(0,h); } std::cout<<str<<"\n"; } } *10024 Distance http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10024 2点間の距離を求める問題。 解法 math.hのhypot関数を使います。 #include<stdio.h> #include<math.h> int main(){ double x,y,x2,y2; scanf("%lf %lf %lf %lf",&x,&y,&x2,&y2); printf("%lf\n",hypot(x-x2,y-y2)); } *10025 三角形の2辺の長さとなす角が与えられるのでその三角形の面積、周長aを底辺とした時の高さを答えよ。 解法 三角形の公式から求めます #include<stdio.h> #include<math.h> int main(){ double a,b,c,sin1,cos1; scanf("%lf %lf %lf",&a,&b,&c); c=c/180.0*M_PI; sin1=sin(c); cos1=cos(c); c=sqrt(a*a+b*b-2*a*b*cos1); printf("%lf\n%lf\n%lf\n",a*b*sin1*0.5,a+b+c,b*sin1); } *10026 Standard Deviation http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10026 標準偏差を計算せよという問題。 解法 提示された式をそのまま計算します。 #include<stdio.h> #include<math.h> void calc(int n){ double s[1001],ave=0,v=0; for(int i=0;i<n;i++){ scanf("%lf",&s[i]); ave+=s[i]; } ave/=n; for(int i=0;i<n;i++){ v+=(s[i]-ave)*(s[i]-ave); } printf("%lf\n",sqrt(v/n)); } int main(){ int n; while(1){ scanf("%d",&n); if(n==0)break; calc(n); } } *10027 Card Game http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10027 カードゲームの得点を求める問題。 解法 std::stringで比較します。 ショートコードくらいしかやることがありませんが私はショートコードは苦手です。 #include<stdio.h> #include<string> #include<iostream> int main(){ int n,a=0,b=0; std::string t,h; scanf("%d",&n); while(n--){ std::cin>>t>>h; t>h?a+=3:t<h?b+=3:a++&b++; } printf("%d %d\n",a,b); } *10028 Sort I http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10028 数字列をソートして表示する問題 解法 std::sortで一発です。 #include<stdio.h> #include<algorithm> int main(){ int n,a[1001]; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&a[i]); std::sort(a,a+n); for(int i=0;i<n;i++)printf("%s%d",i==0?"":" ",a[i]); printf("\n"); } *10029 Sort II http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10029 ソートするサイズが上がっただけです。 解法 領域が足らないので配列を外に出すくらいです。 0.00をたたき出している人たちはすごいですね。 #include<stdio.h> #include<algorithm> int a[1000002]; int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&a[i]); std::sort(a,a+n); for(int i=0;i<n;i++)printf("%s%d",i==0?"":" ",a[i]); printf("\n"); } *10030と10031 Search I http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10030 解法 std::setを使いました。 この問題をコードサイズ100byte以下で書いてる人たちは純粋にすごいですね。 どんなテクを使ったのか想像すらできません。 #include<stdio.h> #include<set> int main(){ std::set<int> nums; int n,q,ans=0,num; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&num); nums.insert(num); } scanf("%d",&q); for(int i=0;i<q;i++){ scanf("%d",&num); ans+=(nums.find(num)!=nums.end()); } printf("%d\n",ans); } *10032 Stacking Blocks I http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10032 スタックを使った練習問題。 解法 std::stackを使うだけです。 #include<stdio.h> #include<stack> int main(){ std::stack<char> s; char text[6],color[6]; while(1){ scanf("%s",text); if(text[0]=='q')break; if(text[1]=='o'){ printf("%c\n",s.top()); s.pop(); } if(text[1]=='u'){ scanf("%s",color); s.push(color[0]); } } } *10033 Stacking Blocks II http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10033 スタックの山の数と命令が増えました。 解法 スタックの数を増やすだけです。 #include<stdio.h> #include<stack> #include<string> #include<iostream> int main(){ std::stack<char> s[102]; std::string com,color; char c,c2; int no,no2; while(1){ std::cin>>com; if(com=="quit")break; if(com=="push"){ std::cin>>no>>color; s[no].push(color[0]); }else if(com=="pop"){ std::cin>>no; c=s[no].top(); s[no].pop(); std::cout<<c<<"\n"; }else if(com=="move"){ std::cin>>no>>no2; c =s[no].top(); s[no].pop(); s[no2].push(c); } } }

表示オプション

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