求助各位大佬,只有样例和第一个测试点过了
查看原帖
求助各位大佬,只有样例和第一个测试点过了
1047010
_Yvonne楼主2024/3/13 21:11
#include<bits/stdc++.h>
using namespace std;

int n;
struct A{
	char id[30];
	char job[50];
	int contribution;
	int level;
	int flag;
}a[115]; 

//按帮贡排序
bool cmp(const A& a, const A& b)
{
	if (a.contribution != b.contribution)
	{ 
		if (a.contribution > b.contribution)
			return true;
		else
			return false;
	}
	else
		return 0;
}

//按职位为第一关键词和等级为第二关键词排序
bool cmp2(const A& a, const A& b)
{
	if (a.flag!=b.flag)
	{ 
		if (a.flag < b.flag)
			return true;
		else
			return false;
	}
	else
	{
		if(a.level>b.level)
			return true;
		else
			return false;
	}
}

int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].id>>a[i].job>>a[i].contribution>>a[i].level;
	}
	sort(a,a+n,cmp);//帮贡排序
	int hu=2,zhang=4,tang=7,jing=25;
	for(int i=0;i<n;i++)
	{
		if(strcmp(a[i].job,"BangZhu")==0||strcmp(a[i].job,"FuBangZhu")==0)
		{
			if(strcmp(a[i].job,"BangZhu")==0) a[i].flag=1;
			if(strcmp(a[i].job,"FuBangZhu")==0) a[i].flag=2;
			continue;
		}
		if(hu!=0)
		{
			const char str[]="HuFa";
			strcpy(a[i].job,str);
			a[i].flag=3;
			hu--;
			continue;
		}
		if(zhang!=0)
		{
			const char str[]="ZhangLao";
			strcpy(a[i].job,str);
			a[i].flag=4;
			zhang--;
			continue;
		}
		if(tang!=0)
		{
			const char str[]="TangZhu";
			strcpy(a[i].job,str);
			a[i].flag=5;
			tang--;
			continue;
		}
		if(jing!=0)
		{
			const char str[]="JingYing";
			strcpy(a[i].job,str);
			a[i].flag=6;
			jing--;
			continue;
		}
		const char str[]="BangZhong";
		strcpy(a[i].job,str);		
	}
	//再次排序
	sort(a,a+n,cmp2);	
	for(int i=0;i<n;i++)
	{
		cout<<a[i].id<<" "<<a[i].job<<" "<<a[i].level<<endl;
	}
	return 0;
}
2024/3/13 21:11
加载中...