先贴代码
#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了... 按理说在进行第二次排序前应该都是按职位排好序的,那为什么这个返回值会影响到这么多样例呢...