---- *0001 List of Top 3 Hills ソートするだけ http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0001&lang=jp #include<stdio.h> #include <algorithm> int main(){ int m[10],i; for(i=0;i<10;i++){scanf("%d",&m[i]);} std::sort(m,m+10); for(int i=9;i>6;i--)printf("%d\n",m[i]); } ---- *0002 Digit Number 計算するだけ。 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0002&lang=jp #include<stdio.h> int main(){ int a,b,c,d=0; while(scanf("%d %d",&a,&b)!=EOF){ c=a+b; d=0; while(c/10!=0){ c/=10; d++; } printf("%d\n",d+1); } } ---- *0003 Is it a Right Triangle? http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0003&lang=jp 三角形の斜辺を求めるだけ。 #include<stdio.h> int main(){ int a,b,c,d; scanf("%d",&d); for(int i=0;i<d;i++){ scanf("%d %d %d",&a,&b,&c); a*=a; b*=b; c*=c; if(a==b+c || b==c+a || c==b+a){ printf("YES\n"); }else{ printf("NO\n"); } } } ---- *0004 Simultaneous Equation http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0004&lang=jp 逆行列を書くだけ。 #include<stdio.h> int main(){ double a,b,c,d,e,f,x,y,k; while(scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f)!=EOF){ k=a*e-b*d; x=(e*c-b*f)/k+0.0; y=(-d*c+a*f)/k+0.0; printf("%.3lf %.3lf\n",x,y); } } ---- *0005 GCD and LCM http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0005&lang=jp 教科書通りに求めるだけ。 #include<stdio.h> int gcd(int a, int b) { int c; while (b > 0) { c = a % b; a = b; b = c; } return a; } int main(){ int a,b,q; while(scanf("%d %d",&a,&b)!=EOF){ q=gcd(a,b); printf("%d %d\n",q,a*(b/q)); } } ---- *0006 Reverse Sequence http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0006&lang=jp 逆から読むだけ。 #include<stdio.h> #include<string.h> int main(){ char t[21]; scanf("%s",t); for(int i=strlen(t)-1;i>=0;i--){ printf("%c",t[i]); } printf("\n"); } ---- *0007 Debt Hell http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0007&lang=jp 計算するだけ #include<stdio.h> int main(){ int d=100000,n; scanf("%d",&n); for(int i=0;i<n;i++){ d*=1.05; d+=d%1000==0?0:1000-d%1000; } printf("%d\n",d); } ---- *0008 Sum of 4 Integers http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0008&lang=jp メモ化で計算したけど探索範囲が狭いから全探索とたいして計算量違わない。 この問題に関しては上には上がいて恐ろしく小さい計算量で求めている人がいた。 #include<stdio.h> #include<string.h> int main(){ unsigned int m[5][52],p,q; memset(m,0,1040); m[0][0]=1; for(int k=0;k<51;k++){ for(int i=0;i<40;i++){ p=i/10; q=i%10; if(k+p>50) continue; m[p+1][k+q]+=m[p][k]; } } while(scanf("%d",&p)!=EOF){ printf("%d\n",m[4][p]); } } ---- *0009 Prime Number http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0009&lang=jp 下から数えていくだけ この問題、Mapなんか使わず配列をそのまま使えば計算量もコード量も落ちることに気付いたのは提出した後だったりする。 #include<stdio.h> #include<string.h> #include<map> std::map<int,int> s; int p; void setSo(){ const m=1000003; bool t[m]; p=1; memset(t,m,true); s[2]=p; for(int i=3;i<m;i+=2){ if(t[m]==false) continue; p++; s[i]=p; for(int j=i*3;j<m;j+=i*2){ t[j]=false; } } } int main(){ setSo(); int d; std::map<int,int>::iterator it; while(scanf("%d",&d)!=EOF){ it=s.lower_bound(d); it=it!=s.begin()?it--:it; printf("%d\n",(*it).second); } } ---- *0010 Circumscribed Circle of a Triangle http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0010&lang=jp 外心の重心座標を求めるのはちょっとめんどくさい作業だな。 もっと簡単な式あるかも。 #include<stdio.h> #include<math.h> double getDoubleSin(double x1,double y1,double x2,double y2){ double len1,len2,s,c; len1=sqrt(x1*x1+y1*y1); len2=sqrt(x2*x2+y2*y2); s=fabs(x1*y2-y1*x2)/(len1*len2); c=(x1*x2+y1*y2)/(len1*len2); //printf("(%lf %lf)",s,c); return 2*s*c; } double getR(double a,double b,double c){ double ans=a*b*c; ans/=sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c)); return ans; } int main(){ double xs[3],ys[3]; double g1,g2,g3; double vx1,vy1,vx2,vy2; double g[3]; int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lf %lf %lf %lf %lf %lf",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2]); double ansX=0,ansY=0,gSum=0; double lens[3]; for(int i=0;i<3;i++){ vx1=xs[(i+1)%3]-xs[i]; vy1=ys[(i+1)%3]-ys[i]; vx2=xs[(i+2)%3]-xs[i]; vy2=ys[(i+2)%3]-ys[i]; lens[i]=sqrt(vx1*vx1+vy1*vy1); g[i]=getDoubleSin(vx1,vy1,vx2,vy2); //printf("(2s=%lf)\n",g[i]); ansX+=g[i]*xs[i]; ansY+=g[i]*ys[i]; gSum+=g[i]; } double R=getR(lens[0],lens[1],lens[2]); ansX/=gSum; ansY/=gSum; printf("%.3lf %.3lf %.3lf\n",ansX,ansY,R); } }