※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「AOJ1~10」の編集履歴(バックアップ)一覧に戻る

AOJ1~10 - (2011/08/16 (火) 12:16:01) の1つ前との変更点

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

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

+----
+*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);
+	}
+ }