为什么这个题只过了一个点,求助
查看原帖
为什么这个题只过了一个点,求助
469087
Tipsy_bamboo楼主2021/3/7 08:41
#include<bits/stdc++.h>
using namespace std;
struct Men
{
	string name, job1;
	long long job2, help, leve;
};
bool comp3(Men a, Men b)
{
	if(a.job2 != b.job2) return a.job2 < b.job2;
	else return a.leve > b.leve;
}
bool comp1(Men a, Men b)
{
	return a.help > b.help;
}
class Prob
{
	public:
		Men men[115];
		long long how;
		void inpu()
		{
			cin >> how;
			for(int i = 1; i <= how; i++)
			{
				cin >> men[i].name >> men[i].job1 >> men[i].help >> men[i].leve;
				if(men[i].job1[0] == 'B' && men[i].job1[6] == 'u') men[i].job2 = 1;
				else if(men[i].job1[0] == 'F') men[i].job2 = 2;
				else if(men[i].job1[0] == 'H') men[i].job2 = 3;
				else if(men[i].job1[0] == 'Z') men[i].job2 = 4;
				else if(men[i].job1[0] == 'T') men[i].job2 = 5;
				else if(men[i].job1[0] == 'J') men[i].job2 = 6;
				else men[i].job2 = 7;
			}
		}
		void comp2()
		{
			sort(men + 4, men + how + 1, comp1);
		}
		void body()
		{
			for(int i = 4; i <= 5; i++) men[i].job2 = 3;
			for(int i = 6; i <= 9; i++) men[i].job2 = 4;
			for(int i = 10; i <= 16; i++) men[i].job2 = 5;
			for(int i = 17; i <= 41; i++) men[i].job2 = 6;
			for(int i = 42; i <= how; i++) men[i].job1 = 7;
		}
		void comp4()
		{
			sort(men + 1, men + how + 1 , comp3);
		}
		void prin()
		{
			for(int i = 1; i <= how; i++)
			{
				cout << men[i].name << " ";
				switch(men[i].job2)
				{
					case 1:
						cout << "BangZhu" << " ";
						break;
					case 2:
						cout << "FuBangZhu" << " ";
						break;
					case 3:
						cout << "HuFa" << " ";
						break;
					case 4:
						cout << "ZhangLao" << " ";
						break;
					case 5:
						cout << "TangZhu" << " ";
						break;
					case 6:
						cout << "JingYing" << " ";
						break;
					default:
						cout << "BangZhong" << " ";
						break;
				}
				cout << men[i].leve << endl;
			}
		}
};
int main()
{
	//freopen("CS.in", "r", stdin);
	Prob prob;
	prob.inpu();
	prob.comp2();
	prob.body();
	prob.comp4();
	prob.prin();
	return 0;
}
2021/3/7 08:41
加载中...