奇怪的问题增加了!
貌似没什么问题啊...
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
const char job[7][10] = {"BangZhu", "FuBangZhu", "HuFa", "ZhangLao", "TangZhu", "JingYing", "BangZhong"};
struct player{
char name[40];
char job[20];
int lvl;
int ctb;
int idx;
};
bool jobCmp(char a[10], char b[10]){
int i, j;
for(i = 0; i < 7; i ++){
if(strcmp(a, job[i]) == 0) break;
}
for(j = 0; j < 7; j ++){
if(strcmp(b, job[j]) == 0) break;
}
return i == j;
}
bool _jobCmp(char a[10], char b[10]){
int i, j;
for(i = 0; i < 7; i ++){
if(strcmp(a, job[i]) == 0) break;
}
for(j = 0; j < 7; j ++){
if(strcmp(b, job[j]) == 0) break;
}
return i < j;
}
bool _cmp(player a, player b){
if(jobCmp(a.job, b.job)){
if(a.lvl == b.lvl){
return a.idx < b.idx;
}
else {
return a.lvl > b.lvl;
}
}
else{
return _jobCmp(a.job, b.job);
}
}
bool cmp(player a, player b){
if(a.ctb == b.ctb) a.idx < b.idx;
else return a.ctb > b.ctb;
}
int main(int argc, char const *argv[])
{
int n;
scanf("%d", &n);
player a[n];
for(int i = 0; i < n; i ++){
scanf("%s %s %d %d", a[i].name, a[i].job, &a[i].ctb, &a[i].lvl);
a[i].idx = i;
}
player b[n - 3];
int bptr = 0;
player c[3];
int cptr = 0;
for(int i = 0; i < n; i ++){
if(strcmp(a[i].job, job[0]) == 0 || strcmp(a[i].job, job[1]) == 0){
strcpy(c[cptr].name, a[i].name);
strcpy(c[cptr].job, a[i].job);
c[cptr].lvl = a[i].lvl;
c[cptr].ctb = a[i].ctb;
c[cptr ++].idx = a[i].idx;
}
else{
strcpy(b[bptr].name, a[i].name);
strcpy(b[bptr].job, a[i].job);
b[bptr].lvl = a[i].lvl;
b[bptr].ctb = a[i].ctb;
b[bptr ++].idx = a[i].idx;
}
}
sort(b, b + n - 3, cmp);
int cnt = 1;
for(int i = 0; i < n - 3; i ++){
if(cnt <= 2){
strcpy(b[i].job, job[2]);
}
else if(cnt <= 6){
strcpy(b[i].job, job[3]);
}
else if(cnt <= 13){
strcpy(b[i].job, job[4]);
}
else if(cnt <= 38){
strcpy(b[i].job, job[5]);
}
else{
strcpy(b[i].job, job[6]);
}
cnt ++;
}
player d[n];
for(int i = 0; i < 3; i ++){
strcpy(d[i].name, c[i].name);
strcpy(d[i].job, c[i].job);
d[i].lvl = c[i].lvl;
d[i].ctb = c[i].ctb;
d[i].idx = c[i].idx;
}
for(int i = 3; i < n; i ++){
strcpy(d[i].name, b[i - 3].name);
strcpy(d[i].job, b[i - 3].job);
d[i].lvl = b[i - 3].lvl;
d[i].ctb = b[i - 3].ctb;
d[i].idx = b[i - 3].idx;
}
sort(d, d + n, _cmp);
for(int i = 0; i < n; i ++){
printf("%s %s %d\n", d[i].name, d[i].job, d[i].lvl);
}
return 0;
}