PAT乙级1073 多选题常见计分法 (20 分)(这道题太恶心了,恶心啊)

本文解析了一道复杂的C++编程竞赛题目,涉及结构体、映射和文件输入输出等技术。通过具体示例展示了如何读取并处理复杂的数据结构,实现评分逻辑,并找出最常见的错误选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值