求助,能通过样例,不知道错在哪
查看原帖
求助,能通过样例,不知道错在哪
1282378
lbl666aa楼主2024/4/6 13:45
#include<bits/stdc++.h>
using namespace std;
int n;
bool larger(int a, int b){
	return  a > b;  
}
struct bangpai {
	string name;
	string zw;
	int bg;
	int dj;
	int px;
	int djpx;
	int bgf = 0;
	int djf = 0;
	
}a[160];
int bgl[160];
int fbz[3], hf[3], zl[5], tz[8], jy[26], bz[100];
void zwpx(bangpai a[], int n, int bgl[]) {
	a[1].px = 1;
	a[2].px = 2;
	a[3].px = 3;
	for (int i = 4; i <= n; i++) {
		for (int k = 4; k <= n; k++) {
			if (a[k].bg == bgl[i]&&a[k].bgf==0) {
				a[k].bgf = 1;
				a[k].px = i;
				break;
			}
		}
}
	}
void djpx(bangpai a[], int n, int s, int list[],int bgsx[]) {
	for (int i = 1; i <= n; i++) {
		for (int k = 1; k <= n; k++)
			if (list[i] == a[bgsx[s+k-1]].dj&&a[bgsx[s+k-1]].djf==0) {
				a[bgsx[s+k-1]].djf = 1;
				a[bgsx[s+k-1]].djpx = s+i-1;
				break;
			}
	}
}
int sx[120];
int bgsx[120];
int main() {
	int cfbz = 1, czl = 1,chf = 1, ctz = 1, cjy = 1, cbz = 1;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].name >> a[i].zw >> a[i].bg >> a[i].dj;
		bgl[i] = a[i].bg;
	}
	sort(bgl + 4, bgl + 1 + n, larger);
	zwpx(a, n, bgl);
	for (int i = 1; i <= n; i++) {
		if (a[i].px >= 2 && a[i].px <= 3)fbz[cfbz++] = a[i].dj;
		else if (a[i].px >= 4 && a[i].px <= 5) {
			a[i].zw = "HuFa";
			hf[chf++] = a[i].dj;
		}
		else if (a[i].px >= 6 && a[i].px <= 9) {
			a[i].zw = "ZhangLao";
			zl[czl++] = a[i].dj;
		}
		else if (a[i].px >= 10 && a[i].px <= 16) {
			a[i].zw = "TangZhu ";
			tz[ctz++]= a[i].dj;
		}
		else if (a[i].px >= 17 && a[i].px <= 41) {
			a[i].zw = "JingYing ";
			jy[cjy++] = a[i].dj;;
		}
		else if (a[i].px > 41) {
			a[i].zw = "BangZhong ";
			bz[cbz++] = a[i].dj;
		}
	}
	for (int i = 1; i <= n; i++) {
		bgsx[a[i].px] = i;
	}
	sort(fbz+1, fbz + 3);
	djpx(a, 2, 2, fbz,bgsx);
	if (n >= 4 && n <= 5) {
		sort(hf+1, hf +1+n-3, larger);
		djpx(a, n-3, 4, hf, bgsx);
	}
	else if (n >= 6 && n <= 9) {
		sort(hf+1, hf + 3, larger);
		djpx(a, 2,4, hf, bgsx);
		sort(zl+1, zl +1+n-5, larger);
		djpx(a, n-5, 6, zl, bgsx);
	}
	else if (n >= 10 && n <= 16) {
		sort(hf+1, hf + 3, larger);
		djpx(a, 2, 4 , hf, bgsx);
		sort(zl+1, zl + 5, larger);
		djpx(a, 4, 6 , zl, bgsx);
		sort(tz+1, tz +1+n- 9, larger);
		djpx(a, n-9, 10, tz, bgsx);
	}
	else if (n <= 17 && n <= 41) {
		sort(hf + 1, hf + 3, larger);
		djpx(a, 2, 4, hf, bgsx);
		sort(zl + 1, zl + 5, larger);
		djpx(a, 4, 6, zl, bgsx);
		sort(tz + 1, tz +8, larger);
		djpx(a, 7, 10, tz, bgsx);
		sort(jy+1, jy + 1+n-16, larger);
		djpx(a, n-16, 17, jy, bgsx);
	}
	else if (n > 41) {
		sort(hf + 1, hf + 3, larger);
		djpx(a, 2, 4, hf, bgsx);
		sort(zl + 1, zl + 5, larger);
		djpx(a, 4, 6, zl, bgsx);
		sort(tz + 1, tz + 8, larger);
		djpx(a, 7, 10, tz, bgsx);
		sort(jy + 1, jy +26, larger);
		djpx(a, 25, 17, jy, bgsx);
		sort(bz+1, bz + 1+n-41, larger);
		djpx(a, n - 41, 42 , bz, bgsx);
	}
	
	a[1].djpx = 1;
	for (int i = 1; i <= n; i++) {
		sx[a[i].djpx] = i;
	}
	for (int i = 1; i <= n; i++) {
		cout << a[sx[i]].name << " " << a[sx[i]].zw << " " << a[sx[i]].dj ;
		if (i != n)cout << endl;
	}
	return 0;
	}
2024/4/6 13:45
加载中...