10分求调(悲
查看原帖
10分求调(悲
737285
liuandwang楼主2024/10/13 16:12
#include<bits/stdc++.h>
using namespace std;
const int N = 150;
struct node {
	string s, zhi;
	long long zw, gong, lv, num;
} ans[N];
queue<string> f;
queue<int> q;
int n;
void qsort(int l, int r) {
	int mid = (l + r) / 2, i = l, j = r;
	do {
		while (ans[i].gong > ans[mid].gong ||
		        (ans[i].gong == ans[mid].gong && ans[i].lv > ans[mid].lv)) i++;
		while (ans[j].gong < ans[mid].gong ||
		        (ans[j].gong == ans[mid].gong && ans[j].lv < ans[mid].lv)) j--;
		if (i <= j) {
			swap(ans[i], ans[j]);
			i++, j--;
		}
	} while (i <= j);
	if (l < j) qsort(l, j);
	if (i < r) qsort(i, r);
}
void sort1(int l, int r) {
	int mid = (l + r) / 2, i = l, j = r;
	do {
		while (ans[i].zw > ans[mid].zw ||
		        (ans[i].zw == ans[mid].zw && ans[i].lv > ans[mid].lv) ||
		        (ans[i].zw == ans[mid].zw && ans[i].lv == ans[mid].lv &&
		         ans[i].num < ans[mid].num)) i++;
		while (ans[j].zw < ans[mid].zw ||
		        (ans[j].zw == ans[mid].zw && ans[j].lv < ans[mid].lv) ||
		        (ans[j].zw == ans[mid].zw && ans[j].lv == ans[mid].lv &&
		         ans[j].num > ans[mid].num)) j--;
		if (i <= j) {
			swap(ans[i], ans[j]);
			i++, j--;
		}
	} while (i <= j);
	if (l < j) sort1(l, j);
	if (i < r) sort1(i, r);
}
void scf() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> ans[i].s >> ans[i].zhi >> ans[i].gong >> ans[i].lv;
		ans[i].num = i + 1;
		if (ans[i].zhi == "BangZhu") ans[i].zw = 6;
		if (ans[i].zhi == "FuBangZhu") ans[i].zw = 5;
		if (ans[i].zhi == "HuFa") ans[i].zw = 4;
		if (ans[i].zhi == "ZhangLao") ans[i].zw = 3;
		if (ans[i].zhi == "TangZhu") ans[i].zw = 2;
		if (ans[i].zhi == "JingYing") ans[i].zw = 1;
		if (ans[i].zhi == "BangZhong") ans[i].zw = 0;
	}
	for (int i = 0; i < 2; i++) f.push("HuFa"), q.push(4);
	for (int i = 0; i < 4; i++) f.push("ZhangLao"), q.push(3);
	for (int i = 0; i < 7; i++) f.push("TangZhu"), q.push(2);
	for (int i = 0; i < 25; i++) f.push("JingYing"), q.push(1);
	for (int i = 0; i < n; i++) f.push("BangZhong"), q.push(0);
}
int main() {
	scf();
	qsort(0, n - 1);
	for (int i = 0; i < n; i++) {
		if (ans[i].zw < 5) {
			ans[i].zhi = f.front();
			f.pop();
			ans[i].zw = q.front();
			q.pop();
		}
	}
	sort1(0, n - 1);
	for (int i = 0; i < n; i++)
	 cout  << ans[i].s << " " << ans[i].zhi  << " " << ans[i].lv << endl;
	return 0;
}
2024/10/13 16:12
加载中...