完全跟着题意模拟就行了。
具体细节有注释。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
int student[1005], que[105];
struct node {
int score, key;
vector<char>ans;
};
int main()
{
int n, m;
cin >> n >> m;
vector<node>quest;
for (int i = 0; i < m; i++) {
int score, num, key;
cin >> score >> num >> key;
vector<char>v;
for (int j = 0; j < key; j++)
{
char ch;
cin >> ch;
v.push_back(ch);
}
quest.push_back({ score,key,v });
}
int maxu = 1;//错误次数最大值。 只能从1开始,0个不算错误。
bool flag = 0;//是否出现全部正确情况
for(int s = 0; s < n; s++) //第几个学生
{
for (int k = 0; k < m; k++) //第几题
{
char ch;
cin >> ch;
int h;
cin >> h;
vector<char>ans;
for (int i = 0; i < h; i++) {
cin >> ch;
ans.push_back(ch);
}
cin >> ch;
sort(ans.begin(), ans.end());
if (h == quest[k].key && ans == quest[k].ans) {
student[s] += quest[k].score;
}
else {
flag = 1;
que[k]++;
maxu = max(maxu, que[k]);
}
}
}
for (int i = 0; i < n; i++) {
cout << student[i] << endl;
}
if (flag) {
vector<int>ans;
for (int i = 0; i < m; i++) {
if (que[i] == maxu) {
ans.push_back(i + 1);
}
}
cout << maxu;
for (int i = 0; i < ans.size(); i++) {
cout << ' ' << ans[i];
}
}
else//全部正确
cout << "Too simple\n";
return 0;
}