夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

練習。

練習ログです。

シーザー暗号問題は調整なう。ってか正答率ひくすぎwww

0032

二辺と対角線の長さが与えられるのでデータセットの中のひしがたと長方形の数を求める問題。

正方形は含めなくていいらしい。

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

bool rect(int a, int b, int c) {
	return pow(c,2)==pow(b,2)+pow(a,2);
}

int main() {
	int fs, ss, di, rec=0, loz=0;
	while (scanf("%d,%d,%d",&fs,&ss,&di)!=EOF) {
		if (fs!=ss&&rect(fs,ss,di)) rec++;
		else if (!rect(fs,ss,di)&&fs==ss) loz++;
	}
	cout << rec << endl;
	cout << loz << endl;
}

0046

山の標高が与えられるので一番高いのと一番低いのの標高差を求める問題。

最初if文でやったらなぜかうまくいかなかった・・・

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	double m, max_m=-1.0, min_m=1000000000;
	while (cin >> m) {
		min_m = min(min_m, m);
		max_m = max(max_m, m);
	}
	double ans = max_m - min_m;
	cout << ans << endl;
}

0500

JOI問題。(volume5がそうらしいのでしばらくコレ解きます。)
A君とB君が手札を持っていてそれぞれの手札を端から開いていったとき多い数の方が両方のカードをとっていき(引き分けは各自の物)最終的にもってるカードに書かれている数の合計が得点になるのでA君B君の得点を求めましょう・・・

日本語ぐちゃぐちゃだけどとにかく書くだけ。

#include <iostream>

using namespace std;

int main() {
	int n;
	while (cin >> n && n != 0) {
		int A=0, B=0, a, b;
		for (int i=0; i<n; i++) {
			cin >> a >> b;
			if (a > b) {
				A += a+b;
			} else if (a < b) {
				B += a+b;
			} else {
				A += a;
				B += b;
			}
		}
		cout << A << " " << B << endl;
	}
}

0501

最初に変換表が与えられてその通りに変換した文字列を返すもの。

2回変換してはダメなのでbreak文を忘れず。

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main() {
	int n,m;
	char tmp;
	while (cin >> n) {
		if (n == 0) break;
		pair<char, char> key[n];
		for (int i=0; i<n; i++) {
			cin >> key[i].first >> key[i].second;
		}
		cin >> m;
		string ans = "";
		for (int i=0; i<m; i++) {
			cin >> tmp;
			for (int j=0; j<n; j++) {
				if (tmp == key[j].first) {
					tmp = key[j].second;
					break;
				}
			}
			ans += tmp;
		}
		cout << ans << endl;
	}
	return 0;
}

0502

ダイスを指定された操作で転がしていき、毎回の一番上の目の数の合計を求める問題。

うまいデータ構造ないかなと思ったけど結局ダイスの配列を毎回更新していく形で収まった。
ただコノコードだと文字数多いのでポカミス注意

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	int tmp[6];
	int n;
	while (cin >> n && n != 0) {
		int dice[] = {1,2,3,4,5,6};
		string vec;
		int ans=1;
		for (int i=0; i<n; i++) {
			cin >> vec;
			if (vec=="North") {
				tmp[0] = dice[1]; tmp[1] = dice[5]; tmp[2] = dice[2]; // 123456->263415
				tmp[3] = dice[3]; tmp[4] = dice[0]; tmp[5] = dice[4];
				for (int j=0; j<6; j++) {
					dice[j] = tmp[j];
				}
				ans += dice[0];
			} else if (vec=="East") {
				tmp[0] = dice[3]; tmp[1] = dice[1]; tmp[2] = dice[0]; // 123456->421653
				tmp[3] = dice[5]; tmp[4] = dice[4]; tmp[5] = dice[2];
				for (int j=0; j<6; j++) {
					dice[j] = tmp[j];
				}
				ans += dice[0];
			} else if (vec=="West") {
				tmp[0] = dice[2]; tmp[1] = dice[1]; tmp[2] = dice[5]; // 123456->326154
				tmp[3] = dice[0]; tmp[4] = dice[4]; tmp[5] = dice[3];
				for (int j=0; j<6; j++) {
					dice[j] = tmp[j];
				}
				ans += dice[0];
			} else if (vec=="South") {
				tmp[0] = dice[4]; tmp[1] = dice[0]; tmp[2] = dice[2]; // 123456->513462
				tmp[3] = dice[3]; tmp[4] = dice[5]; tmp[5] = dice[1];
				for (int j=0; j<6; j++) {
					dice[j] = tmp[j];
				}
				ans += dice[0];
			} else if (vec=="Left") {
				tmp[0] = dice[0]; tmp[1] = dice[3]; tmp[2] = dice[1]; // 123456->142536
				tmp[3] = dice[4]; tmp[4] = dice[2]; tmp[5] = dice[5];
				for (int j=0; j<6; j++) {
					dice[j] = tmp[j];
				}
				ans += dice[0];
			} else if (vec=="Right") {
				tmp[0] = dice[0]; tmp[1] = dice[2]; tmp[2] = dice[4]; // 123456->135246
				tmp[3] = dice[1]; tmp[4] = dice[3]; tmp[5] = dice[5];
				for (int j=0; j<6; j++) {
					dice[j] = tmp[j];
				}
				ans += dice[0];
			}
		}
		cout << ans << endl;
	}
}