H E L P
查看原帖
H E L P
303132
Okimoto楼主2020/6/17 13:25

奇怪的问题增加了!

貌似没什么问题啊...

#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;
}		
2020/6/17 13:25
加载中...