运用vector,set判重,相等判断来解决此问题
#include<cstdio>
#include<set>
#include<vector>
using namespace std;
int main()
{
int n,m,x,y,s;
char c;
//freopen("1058.txt","r",stdin);
scanf("%d %d",&n,&m);
vector<set<char> > right(m);
vector<int> Wrongcnt(m),score(m);
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&score[i],&x,&y);
for(int j=0;j<y;j++)
{
scanf(" %c",&c);
right[i].insert(c);
}
}
for(int i=0;i<n;i++)
{
int sum=0;scanf("\n");
for(int j=0;j<m;j++)
{
set<char> st;
if(j!=0) scanf(" ");
scanf("(%d",&x);
for(int k=0;k<x;k++)
{
scanf(" %c",&c);
st.insert(c);
}
scanf(")");
if(st==right[j])
{
sum+=score[j];
}
else
Wrongcnt[j]++;
}
printf("%d\n",sum);
}
int Max=0;
for(int i=0;i<m;i++)
{
if(Wrongcnt[i]>Max)
Max=Wrongcnt[i];
}
if(Max==0)
printf("Too simple");
else
{
printf("%d",Max);
for(int i=0;i<m;i++)
{
if(Wrongcnt[i]==Max)
printf(" %d",i+1);
}
}
return 0;
}