做法可能有点奇怪,样例过了但全Wa。
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
string Name,p1,p2,p3,Score;
}ns[101];
bool Score(node x,node y){//分数升序排序
return x.Score<y.Score;
}bool score(node x,node y){//分数降序排序
return x.Score>y.Score;
}bool Name(node x,node y){//名字升序排序
return x.Name<y.Name;
}bool name(node x,node y){//名字降序排序
return x.Name>y.Name;
}bool P1(node x,node y){//p1升序排序
return x.p1<y.p1;
}bool p1(node x,node y){//p1降序排序
return x.p1>y.p1;
}bool p2(node x,node y){//p2降序排序
return x.p2>y.p2;
}bool P2(node x,node y){//p2升序排序
return x.p2<y.p2;
}bool P3(node x,node y){//p3升序排序
return x.p3<y.p3;
}bool p3(node x,node y){//p3降序排序
return x.p3>y.p3;
}
signed main(){
int n,m;
cin>>n;
string s,a,b,c,d,e;//s是表格的标题行,a是第一个表目,b是第二个,c是第三个,d是第四个,e是第五个
cin>>s;
int len=s.size(),l=0;//len是长度,l是第几个
string cnt="";
s=s+",";
for(int i=0;i<=len;i++){//处理a,b,c,d,e
if(s[i]!=',')cnt+=s[i];
else{
l++;
if(l==1)a=cnt;
if(l==2)b=cnt;
if(l==3)c=cnt;
if(l==4)d=cnt;
if(l==5)e=cnt;
cnt="";
}
}for(int i=2;i<=n;i++){//处理输入
string x;
cin>>x;
int Len=x.size();
x=x+",";
string y="";
int k=0;
for(int j=0;j<=Len;j++){
if(x[j]!=',')y+=x[j];
else{
k++;
if(k==1){
if(a=="Name")ns[i].Name=y;
if(a=="p1")ns[i].p1=y;
if(a=="p2")ns[i].p2=y;
if(a=="p3")ns[i].p3=y;
if(a=="Score")ns[i].Score=y;
}if(k==2){
if(b=="Name")ns[i].Name=y;
if(b=="p1")ns[i].p1=y;
if(b=="p2")ns[i].p2=y;
if(b=="p3")ns[i].p3=y;
if(b=="Score")ns[i].Score=y;
}if(k==3){
if(c=="Name")ns[i].Name=y;
if(c=="p1")ns[i].p1=y;
if(c=="p2")ns[i].p2=y;
if(c=="p3")ns[i].p3=y;
if(c=="Score")ns[i].Score=y;
}if(k==4){
if(d=="Name")ns[i].Name=y;
if(d=="p1")ns[i].p1=y;
if(d=="p2")ns[i].p2=y;
if(d=="p3")ns[i].p3=y;
if(d=="Score")ns[i].Score=y;
}if(k==5){
if(e=="Name")ns[i].Name=y;
if(e=="p1")ns[i].p1=y;
if(e=="p2")ns[i].p2=y;
if(e=="p3")ns[i].p3=y;
if(e=="Score")ns[i].Score=y;
}y="";
}
}
}cin>>m;
for(int i=1;i<=m;i++){//处理排序
string op;
cin>>op;
if(op[0]=='S'){
if(op[5]=='+'){
sort(ns+2,ns+n+1,Score);
}else sort(ns+2,ns+n+1,score);
}if(op[0]=='N'){
if(op[4]=='+'){
sort(ns+2,ns+n+1,Name);
}else sort(ns+2,ns+n+1,name);
}if(op[0]=='p'){
if(op[1]=='1'){
if(op[2]=='+'){
sort(ns+2,ns+n+1,P1);
}else sort(ns+2,ns+n+1,p1);
}if(op[1]=='2'){
if(op[2]=='+'){
sort(ns+2,ns+n+1,P2);
}else sort(ns+2,ns+n+1,p2);
}if(op[1]=='3'){
if(op[2]=='+'){
sort(ns+2,ns+n+1,P3);
}else sort(ns+2,ns+n+1,p3);
}
}
}for(int i=0;i<len;i++)cout<<s[i];//输出标题行
cout<<endl;
for(int i=2;i<=n;i++){//处理输出
if(a=="Name")cout<<ns[i].Name<<",";
if(a=="p1")cout<<ns[i].p1<<",";
if(a=="p2")cout<<ns[i].p2<<",";
if(a=="p3")cout<<ns[i].p3<<",";
if(a=="Score")cout<<ns[i].Score<<",";
if(b=="Name")cout<<ns[i].Name<<",";
if(b=="p1")cout<<ns[i].p1<<",";
if(b=="p2")cout<<ns[i].p2<<",";
if(b=="p3")cout<<ns[i].p3<<",";
if(b=="Score")cout<<ns[i].Score<<",";
if(c=="Name")cout<<ns[i].Name<<",";
if(c=="p1")cout<<ns[i].p1<<",";
if(c=="p2")cout<<ns[i].p2<<",";
if(c=="p3")cout<<ns[i].p3<<",";
if(c=="Score")cout<<ns[i].Score<<",";
if(d=="Name")cout<<ns[i].Name<<",";
if(d=="p1")cout<<ns[i].p1<<",";
if(d=="p2")cout<<ns[i].p2<<",";
if(d=="p3")cout<<ns[i].p3<<",";
if(d=="Score")cout<<ns[i].Score<<",";
if(e=="Name")cout<<ns[i].Name<<endl;
if(e=="p1")cout<<ns[i].p1<<endl;
if(e=="p2")cout<<ns[i].p2<<endl;
if(e=="p3")cout<<ns[i].p3<<endl;
if(e=="Score")cout<<ns[i].Score<<endl;
}return 0;
}