求助90分就第一个点超时
  • 板块P1786 帮贡排序
  • 楼主dtw35l
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/11/26 13:49
  • 上次更新2023/10/27 01:26:13
查看原帖
求助90分就第一个点超时
559969
dtw35l楼主2022/11/26 13:49
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>

using namespace std;

map < string, int > mp;

struct man {
	string name, zhiwei;
	int gong, ji, shuru;
} a[20000];
void print(int index);
void input(int index);
bool cmp1(man x, man y);
bool cmp2(man x, man y);
int n;

// 两位护法,四位长老,七位堂主,二十五名精英,帮众若干
string zhi[] = {"HuFa", "ZhangLao", "TangZhu", "JingYing", "BangZhong"};
int in[] = {1, 3, 7, 14, 39, 200};

int main() {
	freopen(".txt", "w", stdout);
	for (int i = 0; i < 5; i++) {
		mp[zhi[i]] = i;
	}
	cin >> n;
	while (true) {
		input(1);
		if (a[1].zhiwei == "BangZhu" || a[1].zhiwei == "FuBangZhu")
			print(1);
		else
			break;
		n--;
	}
	for (int i = 2; i <= n; i++) {
		input(i);
	}
	stable_sort(a + 1, a + n + 1, cmp1);
	for (int i = 0; i < 5; i++) {
		for (int j = in[i]; j < in[i + 1]; j++) {
			//printf("(%d, %d)", i, j);
			a[j].zhiwei = zhi[i];
		}
	}
	stable_sort(a + 1, a + n + 1, cmp2);
	for (int i = 1; i <= n; i++) {
		print(i);
	}
	return 0;
}

void print(int index) {
	//cout << "---";
	cout << a[index].name << ' ';
	cout << a[index].zhiwei << ' ';
	cout << a[index].ji << endl;
}

void input(int index) {
	cin >> a[index].name >> a[index].zhiwei;
	cin >> a[index].gong >> a[index].ji;
	a[index].shuru = index;
}

bool cmp1(man x, man y) {
	return x.gong > y.gong;
}

bool cmp2(man x, man y) {
	int ix = mp[x.zhiwei];
	int iy = mp[y.zhiwei];
	if (ix != iy)
		return ix < iy;
	if (x.ji != y.ji)
		return x.ji > y.ji;
	return x.shuru < y.shuru;
}
2022/11/26 13:49
加载中...