P1786 帮贡排序,代码如下,实在想不到为什么只有60分,只过了6个ac,代码如下,有大佬能帮忙看一下吗,谢谢。
#include<stdio.h>
#include<string.h>
struct Bang{
int id;
char name[50];
char status[40];
int bg;
int order;
}a[120];
void px(int l,int r){
int i,j;
int max_i;
for(j=l;j<=r;j++){
max_i=j;
for(i=j;i<=r;i++){
if(a[i].bg>a[max_i].bg)max_i=i;
}
a[0]=a[max_i];
for(i=max_i;i>j;i--){
a[i]=a[i-1];
}
a[j]=a[0];
}
}
void px_s(int l,int r){
int i,j;
int max_i;
for(j=l;j<=r;j++){
max_i=j;
for(i=j;i<=r;i++){
if(a[i].id>a[max_i].id)max_i=i;
}
a[0]=a[max_i];
for(i=max_i;i>j;i--){
a[i]=a[i-1];
}
a[j]=a[0];
}
}
void px_o(int l,int r){//按照等级排序
int i,j;
int max_i;
for(j=l;j<=r;j++){
max_i=j;
for(i=j;i<=r;i++){
if(a[i].order>a[max_i].order)max_i=i;
}
a[0]=a[max_i];
for(i=max_i;i>j;i--){
a[i]=a[i-1];
}
a[j]=a[0];
}
}
void auth(int l,int r,char *s){
int i;
for(i=l;i<=r;i++){
strcpy(a[i].status,s);
}
}
int main(){
int i,n,j;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%s%s%d%d",&a[i].name,&a[i].status,&a[i].bg,&a[i].order);
if(strcmp(a[i].status,"BangZhu")==0){
a[i].id=7;
}else if(strcmp(a[i].status,"FuBangZhu")==0){
a[i].id=6;
}else if(strcmp(a[i].status,"HuFa")==0){
a[i].id=5;
}else if(strcmp(a[i].status,"ZhangLao")==0){
a[i].id=4;
}else if(strcmp(a[i].status,"TangZhu")==0){
a[i].id=3;
}else if(strcmp(a[i].status,"JingYing")==0){
a[i].id=2;
}else if(strcmp(a[i].status,"BangZhong")==0){
a[i].id=1;
}
}
px_s(1,n);
px(4,n);
px_o(2,3);//副帮主排序
px_o(4,5);//护法排序
px_o(6,9);//长老排序
px_o(10,16);//堂主排序
px_o(17,41);//精英排序
px_o(42,n);//帮众排序
auth(4,5,"HuFa");
auth(6,9,"ZhangLao");
auth(10,16,"TangZhu");
auth(17,41,"JingYing");
auth(42,n,"BangZhong");
for(i=1;i<=n;i++){
printf("%s %s %d\n",a[i].name,a[i].status,a[i].order);
}
return 0;
}