关于sort函数的小小疑问
查看原帖
关于sort函数的小小疑问
276999
rinnolo楼主2022/1/13 15:46

先贴代码

#include<bits/stdc++.h>
using namespace std;

int n;
int num[5]={2,4,7,25,10000};
char zhiwein[5][20]={"HuFa","ZhangLao","TangZhu","JingYing","BangZhong"};
struct people{
	string name;
	string zhiwei;
	long long int banggong;
	int level;
	int n; 
} p[160],p2[160];

int change(string a){
	if (a=="BangZhu") return 0;
	if (a=="FuBangZhu") return 1;
	if (a=="HuFa") return 2;
	if (a=="ZhangLao") return 3;
	if (a=="TangZhu") return 4;
	if (a=="JingYing") return 5;
	if (a=="BangZhong") return 6;
}
bool cmp(people a,people b)
{
	if (a.banggong==b.banggong)	return a.n<b.n;
	else return a.banggong>b.banggong;
}
bool cmp2(people a,people b)
{
	if (a.zhiwei==b.zhiwei)	
	{
		if (a.level==b.level) return a.n<b.n;
		else return a.level>b.level;
	}
	else return false;
}

int main()
{
	cin>>n;
	int flag=0,j=3;
	for (int i=0;i<n;i++)
	{
		cin>>p[i].name>>p[i].zhiwei>>p[i].banggong>>p[i].level;
		p[i].n=i;
	}
	for (int i=0;i<n;i++)
	{
		if (p[i].zhiwei=="BangZhu") 
		{
			p2[0]=p[i];continue;
		}
		if (p[i].zhiwei=="FuBangZhu" && flag==1)
		{
			p2[2]=p[i];continue;
		}		
		if (p[i].zhiwei=="FuBangZhu" && flag==0)
		{
			flag=1;
			p2[1]=p[i];continue;
		}
		p2[j]=p[i];
		j++;
	}	
	if (p2[2].level>p2[1].level) swap(p2[2],p2[1]);	
	sort(p2+3,p2+n,cmp);	
	int jf=5;j=0;
	for (int i=3;i<n;i++)
	{
		p2[i].zhiwei=zhiwein[j];
		if (i==jf-1)
		{	
			j++;
			jf+=num[j];
		}
	}	
	sort(p2+3,p2+n,cmp2);
	
	for (int i=0;i<n;i++)
	{
		cout<<p2[i].name<<" "<<p2[i].zhiwei<<" "<<p2[i].level<<endl;
	}
	return 0;
}

这段代码只能过第一个样例点... 但是将cmp2函数最后一行更换为 else return change(a.zhiwei)<change(b.zhiwei); 之后,就神奇的AC了... 按理说在进行第二次排序前应该都是按职位排好序的,那为什么这个返回值会影响到这么多样例呢...

2022/1/13 15:46
加载中...