Nswoj毎日1題:1種のソート

1652 ワード

[ソート]
まず構造体を使ってこの長方形の特徴(番号、長さ、幅)を保存します.
次に、各情報を入力し、長さと幅を同時に位置交換する(長さ>幅を保証する).
sort関数を用いて(0,m)区間内のすべての長方形をJudge()の規則に従って並べ替える.
最後にtem 1,tem 2,tem 3で各長方形の情報をすべての長方形と比較し、異なる場合は印刷する.
*(以前に並べ替えが行われているため、同じ長方形は隣接する区間内にあるので、同じ長方形は印刷されません).
#include
#include
using namespace std;

struct Rangle {
	int card;
	int length;
	int width;
}RangleArray[1000];

bool Judge(Rangle a_Rangle, Rangle b_Rangle) {
	if (a_Rangle.card != b_Rangle.card) {
		return a_Rangle.card < b_Rangle.card;
	}
	else {
		if (a_Rangle.length != b_Rangle.length) {
			return a_Rangle.length < b_Rangle.length;
		}
		else {
			return a_Rangle.width < b_Rangle.width;
		}
	}
}

int main() {
	int n;
	cin >> n;

	while (n--) {
		int m;
		cin >> m;//rangles

		for (int i = 0; i < m; i++) {
			cin >> RangleArray[i].card >> RangleArray[i].length >> RangleArray[i].width;

			if (RangleArray[i].length < RangleArray[i].width) {
				int temp = RangleArray[i].length;
				RangleArray[i].length = RangleArray[i].width;
				RangleArray[i].width = temp;
			}
		}

		sort(RangleArray, RangleArray + m, Judge);

		int tem1 = -1, tem2 = -1, tem3 = -1;
		for (int i = 0; i < m; i++) {
			if (tem1 != RangleArray[i].card || tem2 != RangleArray[i].length || tem3 != RangleArray[i].width) {
				cout << RangleArray[i].card << ' ' << RangleArray[i].length << ' ' << RangleArray[i].width << endl;
			}
			tem1 = RangleArray[i].card;
			tem2 = RangleArray[i].length;
			tem3 = RangleArray[i].width;
		}
	}

	return 0;
}