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

AOJ11~20 - (2011/08/15 (月) 17:39:06) の1つ前との変更点

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

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

*0011 Drawing Lots http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0011&lang=jp ただ単に入れ替えをシミュレートするだけです。 #include<stdio.h> #include <algorithm> int main(){ int d[32],w,h,i,l,R; scanf("%d %d",&w,&h); for(i=1;i<=w;i++){ d[i]=i; } for(i=0;i<h;i++){ scanf("%d,%d",&l,&R); std::swap(d[l],d[R]); } for(int i=1;i<=w;i++){ printf("%d\n",d[i]); } } ---- *0012 A Point in a Triangle 三角形ABCの中に点Pがあるかを調べるには →AP=t(→AB)+s(→AC) →=ベクトル。 0<=t<=1 && 0<=s<=1 && s+t<=1なら点pは三角形の中にある。 というのを解くだけです。 #include<stdio.h> bool inDelta(double xs[3],double ys[3],double x,double y){ double x1,x2,x3,y1,y2,y3,k,s,t,u; x1=xs[1]-xs[0]; y1=ys[1]-ys[0]; x2=xs[2]-xs[0]; y2=ys[2]-ys[0]; x3=x-xs[0]; y3=y-ys[0]; k=(x1*y2-x2*y1); if(k==0){ return false; } s=(y2*x3-x2*y3)/k; t=(x1*y3-y1*x3)/k; u=s+t; if(s<=0.0 || 1.0<=s || t<=0.0 || 1.0<=t || u<=0.0 || 1.0<=u){ return false; }else{ return true; } } int main(){ double xs[3],ys[3],x,y; while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2],&x,&y)!=EOF){ if(inDelta(xs,ys,x,y)==true){ printf("YES\n"); }else{ printf("NO\n"); } } } ---- *0013 Switching Railroad Cars http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0013&lang=jp スタックをそのまま使うだけ。 #include<stdio.h> #include<stack> int main(){ std::stack<int> s; int l; while(scanf("%d",&l)!=EOF){ if(l==0){ printf("%d\n",s.top()); s.pop(); }else{ s.push(l); } } } ---- *0014 Integral http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0014&lang=jp 高校数学の教科書通りに実装するだけ #include<stdio.h> int main(){ int n,s,w; while(scanf("%d",&w)!=EOF){ s=0; for(int j=w;j<600;j+=w){ s+=j*j*w; } printf("%d\n",s); } } ---- *0015 National Budget http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0015&lang=jp うーん?ちょっと実装に失敗したかも? もう少しましなコードがある気がする。 #include<string.h> #include <iostream> #include <algorithm> void re(std::string& s){ int l=s.size(),m=l/2; for(int i=0;i<m;i++){ std::swap(s[l-i-1],s[i]); } } int main(){ std::string s1,s2,s3; int n,m,u,s; char l,t; std::cin>>n; for(int i=0;i<n;i++){ std::cin>>s1>>s2; s3=""; m=s1.size()>s2.size()?s1.size():s2.size(); if(m>80){ std::cout<<"overflow\n"; continue; } re(s1); re(s2); s1.append(m-s1.size(),'0'); s2.append(m-s2.size(),'0'); l=0; for(int i=0;i<m;i++){ s=(s1[i]-'0')+(s2[i]-'0')+l; l=s/10; t=s%10; s3.append(1,(char)(t+'0')); } if(l!=0) s3.append(1,(char)(l+'0')); if(s3.size()>80){ std::cout<<"overflow\n"; continue; } re(s3); std::cout<<s3<<"\n"; } } ---- *0016 Treasure Hunt http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0016&lang=jp 愚直に実装するだけ。 何か賢い方法があるとも思えない。 #include<stdio.h> #include<math.h> int main(){ int r,n,nowR=90; double x=0,y=0,tr; scanf("%d,%d",&n,&r); while(r!=0 || n!=0){ tr=nowR/180.0*M_PI; x+=n*cos(tr); y+=n*sin(tr); nowR=(nowR-r+360)%360; scanf("%d,%d",&n,&r); } printf("%d\n%d\n",(int)x,(int)y); } ---- *0017 Caesar Cipher the this thatのほうをずらした方が早いのは分かっているが計算量が小さいので意味なし。 楽な実装を選択。 #include<stdio.h> #include<string> int main(){ char c[81]; std::string t; while(scanf("%[^\n]%*c",c)!=EOF){ t=c; for(int i=0;i<27;i++){ for(int j=0;j<t.size();j++){ if('a'<=t[j] && t[j]<='z'){ t[j]=(t[j]-'a'+1)%26+'a'; } } if(t.find("the")!=-1 || t.find("this")!=-1 || t.find("that")!=-1){ printf("%s\n",t.c_str()); break; } } } } ---- *0018 Sorting Five Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0018&lang=jp 実装するだけ。 一文字縮めるのにはこだわらないので適当。 #include<stdio.h> #include <algorithm> int main(){ int a[5]; for(int i=0;i<5;i++){ scanf("%d",&a[i]); } std::sort(a,a+5); printf("%d %d %d %d %d\n",a[4],a[3],a[2],a[1],a[0]); } ---- *0019 Factorial http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0019&lang=jp long long int万歳な問題。 これがなかったらこの問題はビックインテガーが必要になるので少し難しい問題になる。 #include <stdio.h> int main(){ long long int t=1; int n,i; scanf("%d",&n); for(i=2;i<=n;i++){ t*=i; } printf("%llu\n",t); } ---- *0020 Capitalize http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0020&lang=jp 順番に読んで処理するだけのパイプ処理。 #include <stdio.h> int main() { int n; while(~(n = getchar())) putchar(96<n&&n<123?n-32:n); return 0; }
*0011 Drawing Lots http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0011&lang=jp ただ単に入れ替えをシミュレートするだけです。 #include<stdio.h> #include <algorithm> int main(){ int d[32],w,h,i,l,R; scanf("%d %d",&w,&h); for(i=1;i<=w;i++){ d[i]=i; } for(i=0;i<h;i++){ scanf("%d,%d",&l,&R); std::swap(d[l],d[R]); } for(int i=1;i<=w;i++){ printf("%d\n",d[i]); } } ---- *0012 A Point in a Triangle 三角形ABCの中に点Pがあるかを調べるには →AP=t(→AB)+s(→AC) →=ベクトル。 0<=t<=1 && 0<=s<=1 && s+t<=1なら点pは三角形の中にある。 というのを解くだけです。 #include<stdio.h> bool inDelta(double xs[3],double ys[3],double x,double y){ double x1,x2,x3,y1,y2,y3,k,s,t,u; x1=xs[1]-xs[0]; y1=ys[1]-ys[0]; x2=xs[2]-xs[0]; y2=ys[2]-ys[0]; x3=x-xs[0]; y3=y-ys[0]; k=(x1*y2-x2*y1); if(k==0){ return false; } s=(y2*x3-x2*y3)/k; t=(x1*y3-y1*x3)/k; u=s+t; if(s<=0.0 || 1.0<=s || t<=0.0 || 1.0<=t || u<=0.0 || 1.0<=u){ return false; }else{ return true; } } int main(){ double xs[3],ys[3],x,y; while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2],&x,&y)!=EOF){ if(inDelta(xs,ys,x,y)==true){ printf("YES\n"); }else{ printf("NO\n"); } } } ---- *0013 Switching Railroad Cars http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0013&lang=jp スタックをそのまま使うだけ。 #include<stdio.h> #include<stack> int main(){ std::stack<int> s; int l; while(scanf("%d",&l)!=EOF){ if(l==0){ printf("%d\n",s.top()); s.pop(); }else{ s.push(l); } } } ---- *0014 Integral http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0014&lang=jp 高校数学の教科書通りに実装するだけ #include<stdio.h> int main(){ int n,s,w; while(scanf("%d",&w)!=EOF){ s=0; for(int j=w;j<600;j+=w){ s+=j*j*w; } printf("%d\n",s); } } ---- *0015 National Budget http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0015&lang=jp うーん?ちょっと実装に失敗したかも? もう少しましなコードがある気がする。 #include<string.h> #include <iostream> #include <algorithm> void re(std::string& s){ int l=s.size(),m=l/2; for(int i=0;i<m;i++){ std::swap(s[l-i-1],s[i]); } } int main(){ std::string s1,s2,s3; int n,m,u,s; char l,t; std::cin>>n; for(int i=0;i<n;i++){ std::cin>>s1>>s2; s3=""; m=s1.size()>s2.size()?s1.size():s2.size(); if(m>80){ std::cout<<"overflow\n"; continue; } re(s1); re(s2); s1.append(m-s1.size(),'0'); s2.append(m-s2.size(),'0'); l=0; for(int i=0;i<m;i++){ s=(s1[i]-'0')+(s2[i]-'0')+l; l=s/10; t=s%10; s3.append(1,(char)(t+'0')); } if(l!=0) s3.append(1,(char)(l+'0')); if(s3.size()>80){ std::cout<<"overflow\n"; continue; } re(s3); std::cout<<s3<<"\n"; } } ---- *0016 Treasure Hunt http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0016&lang=jp 愚直に実装するだけ。 何か賢い方法があるとも思えない。 #include<stdio.h> #include<math.h> int main(){ int r,n,nowR=90; double x=0,y=0,tr; scanf("%d,%d",&n,&r); while(r!=0 || n!=0){ tr=nowR/180.0*M_PI; x+=n*cos(tr); y+=n*sin(tr); nowR=(nowR-r+360)%360; scanf("%d,%d",&n,&r); } printf("%d\n%d\n",(int)x,(int)y); } ---- *0017 Caesar Cipher the this thatのほうをずらした方が早いのは分かっているが計算量が小さいので意味なし。 楽な実装を選択。 #include<stdio.h> #include<string> int main(){ char c[81]; std::string t; while(scanf("%[^\n]%*c",c)!=EOF){ t=c; for(int i=0;i<27;i++){ for(int j=0;j<t.size();j++){ if('a'<=t[j] && t[j]<='z'){ t[j]=(t[j]-'a'+1)%26+'a'; } } if(t.find("the")!=-1 || t.find("this")!=-1 || t.find("that")!=-1){ printf("%s\n",t.c_str()); break; } } } } ---- *0018 Sorting Five Numbers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0018&lang=jp 実装するだけ。 一文字縮めるのにはこだわらないので適当。 #include<stdio.h> #include <algorithm> int main(){ int a[5]; for(int i=0;i<5;i++){ scanf("%d",&a[i]); } std::sort(a,a+5); printf("%d %d %d %d %d\n",a[4],a[3],a[2],a[1],a[0]); } ---- *0019 Factorial http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0019&lang=jp long long int万歳な問題。 これがなかったらこの問題はビックインテガーが必要になるので少し難しい問題になる。 #include <stdio.h> int main(){ long long int t=1; int n,i; scanf("%d",&n); for(i=2;i<=n;i++){ t*=i; } printf("%llu\n",t); } ---- *0020 Capitalize http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0020&lang=jp 順番に読んで処理するだけのパイプ処理。 #include <stdio.h> int main() { int n; while(~(n = getchar())) putchar(96<n&&n<123?n-32:n); return 0; }

表示オプション

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