https://pintia.cn/problem-sets/994805260223102976/problems/994805263624683520
全是坑 题干太长了
#include <iostream>
#include <map>
using namespace std;
struct test {
double maxscore = 0.0, halfscore = 0.0;
int answer = 0, cnt_choice = 0, correct = 0, cnt = 0, err[300] = { 0 };
};
int main() {
map<char, int> match;
match['a'] = 1; match['b'] = 2; match['c'] = 4; match['d'] = 8; match['e'] = 16;
int N, M, a = 1, b = 2, c = 4, d = 8, e = 16;
cin >> N >> M;
test exam[105];
for (int i = 0; i < M; i++) {
char c;
cin >> exam[i].maxscore >> exam[i].cnt_choice >> exam[i].correct;
for (int j = 0; j < exam[i].correct; j++) {
cin >> c;
exam[i].answer += match[c];
}
exam[i].halfscore = exam[i].maxscore / 2;
}
for (int i = 0; i < N; i++) {
double s = 0.0;
for (int j = 0; j < M; j++) {
int tmp, tmpans = 0, flag = 0;
char c;
c = getchar();
while (c != '(')
c = getchar();
cin >> tmp;
for(int k = 0; k < tmp; k++){
cin >> c;
tmpans += match[c];
}
int num = tmpans ^ exam[j].answer;
if(num){
exam[j].cnt++;
if((num & exam[j].answer) == num)
s += exam[j].halfscore;
for(int k = 0; k < 5; k++){
char ccc = k + 'a';
int cc = num & match[ccc];
if(cc == match[ccc])
exam[j].err[k+'a']++;
}
}else
s += exam[j].maxscore;
}
printf("%.1f\n", s);
}
int max = 0;
for(int i = 0; i < M; i++){
for(int j = 0; j < 5; j++){
if(exam[i].err['a'+j] > max)
max = exam[i].err['a'+j];
}
}
if(!max) cout << "Too simple";
else{
for(int i = 0; i < M; i++){
for(int j = 0; j < 5; j++){
if(max == exam[i].err['a'+j])
printf("%d %d-%c\n", max, i+1, 'a'+j);
}
}
}
return 0;
}