std::stable_sort的代码#include <bits/stdc++.h>
using namespace std;
struct player
{
string name;
int type, level;
long long bg;
};
int n;
string mp[7] = {
"BangZhu", "FuBangZhu", "HuFa", "ZhangLao",
"TangZhu", "JingYing", "BangZhong"
};
player players[111];
int n_mp(string a)
{
for (int i=0; i<7; i++)
if (mp[i]==a)
return i;
}
bool cmp0(player a, player b)
{
return a.bg>b.bg;
}
bool cmp1(player a, player b)
{
return a.type!=b.type ? a.type<b.type : a.level>b.level;
}
int main()
{
scanf("%d", &n);
for (int i=0; i<n; i++)
{
cin >> players[i].name;
string l;
cin >> l;
players[i].type = n_mp(l);
scanf("%lld%d", &players[i].bg, &players[i].level);
}
stable_sort(players+3, players+n, cmp0);
for (int i=3; i<n; i++)
{
if (i>2 && i<=4)
players[i].type = 2;
else if (i>4 && i<=8)
players[i].type = 3;
else if (i>8 && i<=15)
players[i].type = 4;
else if (i>15 && i<=40)
players[i].type = 5;
else players[i].type = 6;
}
stable_sort(players+3, players+n, cmp1);
for (int i=0; i<n; i++)
{
cout << players[i].name << ' ';
cout << mp[players[i].type] << ' ';
printf("%d\n", players[i].level);
}
return 0;
}
#2,6,8,9 WA
std::sort的代码只改动了bool cmp0()与bool cmp1(),并在输入时记录输入顺序
#include <bits/stdc++.h>
using namespace std;
struct player
{
string name;
int type, level;
long long bg;
int n;
};
int n;
string mp[7] = {
"BangZhu", "FuBangZhu", "HuFa", "ZhangLao",
"TangZhu", "JingYing", "BangZhong"
};
player players[111];
int n_mp(string a)
{
for (int i=0; i<7; i++)
if (mp[i]==a)
return i;
}
bool cmp0(player a, player b)
{
return a.bg!=b.bg ? a.bg>b.bg : a.n<b.n;
}
bool cmp1(player a, player b)
{
return a.type!=b.type ? a.type<b.type : (a.level!=b.level?a.level>b.level:a.n<b.n);
}
int main()
{
scanf("%d", &n);
for (int i=0; i<n; i++)
{
cin >> players[i].name;
string l;
cin >> l;
players[i].type = n_mp(l);
scanf("%lld%d", &players[i].bg, &players[i].level);
players[i].n=i;
}
sort(players+3, players+n, cmp0);
for (int i=3; i<n; i++)
{
if (i>2 && i<=4)
players[i].type = 2;
else if (i>4 && i<=8)
players[i].type = 3;
else if (i>8 && i<=15)
players[i].type = 4;
else if (i>15 && i<=40)
players[i].type = 5;
else players[i].type = 6;
}
sort(players+3, players+n, cmp1);
for (int i=0; i<n; i++)
{
cout << players[i].name << ' ';
cout << mp[players[i].type] << ' ';
printf("%d\n", players[i].level);
}
return 0;
}
然而 AC 了。