分析:
大模拟
对于
A
B
C
D
ABCD
ABCD在对应位置状态赋为
1
1
1 然后分情况加上部分分或满分 注意全部未填要判断一下
名字的第一个字母大写 不能直接将第
1
1
1位转大写
CODE:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
const int N=155;
int n,m,Allsc[N],Partsc[N],State[N][5],cnt;
char ans[N][5],test[5][N];
struct Student{
int score;
char Fname[N],Gname[N];
}a[N];
bool cmp(Student a,Student b){
if(a.score==b.score)
{
if(a.Fname==b.Fname)
{
int lenG=strlen(a.Gname);
for(int i=1;i<=lenG;i++)
{
if(a.Gname[i]>b.Gname[i]) return 0;
else if(a.Gname[i]<b.Gname[i]) return 1;
}
return 1;
}
int lenF=strlen(a.Fname+1);
for(int i=1;i<=lenF;i++)
{
if(a.Fname[i]>b.Fname[i]) return 0;
else if(a.Fname[i]<b.Fname[i]) return 1;
}
return 1;
}
return a.score>b.score;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s%s",a[i].Fname+1,a[i].Gname+1);
int len=strlen(a[i].Fname+1);
for(int j=1;j<=len;j++)
if(a[i].Fname[j]>='a'&&a[i].Fname[j]<='z') a[i].Fname[j]-=32;
int len2=strlen(a[i].Gname+1);
if(len2==1)
{
if(isalpha(a[i].Gname[1]))
if(a[i].Gname[1]>='a'&&a[i].Gname[1]<='z')
a[i].Gname[1]-=32;
}
else
{
int u=0;
for(int j=1;j<=len2;j++)
if(isalpha(a[i].Gname[j]))
{
u=j;
if(a[i].Gname[j]>='a'&&a[i].Gname[j]<='z')
a[i].Gname[j]-=32;
break;
}
for(int j=u+1;j<=len2;j++)
if(a[i].Gname[j]>='A'&&a[i].Gname[j]<='Z')
a[i].Gname[j]+=32;
}
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%s",&Allsc[i],&Partsc[i],ans[i]+1);
int lena=strlen(ans[i]+1);
for(int j=1;j<=lena;j++)
{
if(ans[i][j]=='A') State[i][1]=1;
else if(ans[i][j]=='B') State[i][2]=1;
else if(ans[i][j]=='C') State[i][3]=1;
else if(ans[i][j]=='D') State[i][4]=1;
}
}
for(int T=1;T<=n;T++)
{
for(int i=1;i<=4;i++)
scanf("%s",test[i]+1);
for(int qwq=1;qwq<=m;qwq++)
{
int op=1,check=0;
for(int k=1;k<=4;k++)
{
if(test[k][qwq]=='X')
{
check=1;
if(State[qwq][k]==0)
{
op=-1;
break;
}
}
else if(State[qwq][k]==1) op=0;
}
if(check==0||op==-1) a[T].score+=0;
else if(op==0) a[T].score+=Partsc[qwq];
else if(op==1) a[T].score+=Allsc[qwq];
}
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
printf("%d %s %s\n",a[i].score,a[i].Fname+1,a[i].Gname+1);
return 0;
}