1073 多选题常见计分法 (20 分)
批改多选题是比较麻烦的事情,有很多不同的计分方法。有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数;如果考生选择了任何一个错误的选项,则不能得分。本题就请你写个程序帮助老师批改多选题,并且指出哪道题的哪个选项错的人最多。
输入格式:

输入在第一行给出两个正整数 N(≤1000)和 M(≤100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母 a 开始顺次排列。各项间以 1 个空格分隔。最后 N 行,每行给出一个学生的答题情况,其每题答案格式为 (选中的选项个数 选项1 ……),按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。
输出格式:

按照输入的顺序给出每个学生的得分,每个分数占一行,输出小数点后 1 位。最后输出错得最多的题目选项的信息,格式为:错误次数 题目编号(题目按照输入的顺序从1开始编号)-选项号。如果有并列,则每行一个选项,按题目编号递增顺序输出;再并列则按选项号递增顺序输出。行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 Too simple。
输入样例 1:

3 4
3 4 2 a c
2 5 1 b
5 3 2 b c
1 5 4 a b d e
(2 a c) (3 b d e) (2 a c) (3 a b e)
(2 a c) (1 b) (2 a b) (4 a b d e)
(2 b d) (1 e) (1 c) (4 a b c d)
输出样例 1:

3.5
6.0
2.5
2 2-e
2 3-a
2 3-b
输入样例 2:

2 2
3 4 2 a c
2 5 1 b
(2 a c) (1 b)
(2 a c) (1 b)
输出样例 2:

5.0
5.0
Too simple

#include<iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {int n, m, optnum, truenum, temp, maxcnt = 0;int hash[] = {1, 2, 4, 8, 16}, opt[1010][110] = {0};char c;scanf("%d %d", &n, &m);vector<int> fullscore(m), trueopt(m);vector<vector<int>> cnt(m, vector<int>(5));for (int i = 0; i < m; i++) {scanf("%d %d %d", &fullscore[i], &optnum, &truenum);for (int j = 0; j < truenum; j++) {scanf(" %c", &c);trueopt[i] += hash[c-'a'];}}for (int i = 0; i < n; i++) {double grade = 0;for (int j = 0; j < m; j++) {getchar();scanf("(%d", &temp);for (int k = 0; k < temp; k++) {scanf(" %c)", &c);opt[i][j] += hash[c-'a'];}int el = opt[i][j] ^ trueopt[j];if (el) {if ((opt[i][j] | trueopt[j]) == trueopt[j]) {grade += fullscore[j] * 1.0 / 2;}if (el) {for (int k = 0; k < 5; k++)if (el & hash[k]) cnt[j][k]++;}} else {grade += fullscore[j];}}printf("%.1f\n", grade);}for (int i = 0; i < m; i++)for (int j = 0; j < 5; j++)maxcnt = maxcnt > cnt[i][j] ? maxcnt : cnt[i][j];if (maxcnt == 0) {printf("Too simple\n");} else {for (int i = 0; i < m; i++) {for (int j = 0; j < cnt[i].size(); j++) {if (maxcnt == cnt[i][j])printf("%d %d-%c\n", maxcnt, i+1, 'a'+j);}}}return 0;
}

C++学习之路 | PTA乙级—— 1073 多选题常见计分法 (20 分)(精简)相关推荐

  1. 【PAT乙级】1073 多选题常见计分法 (20 分)

    题目地址 #include<cstdio> #include<iostream> using namespace std; int n,m; struct node//题 {i ...

  2. 1073 多选题常见计分法 (20 分)_66行代码AC

    立志用最少的代码做最高效的表达 PAT乙级最优题解-->传送门 批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项, ...

  3. 1073 多选题常见计分法 (20 分)(注意测试点4)

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生选择了任何一个错误的选项,则不能得分.本 ...

  4. C++学习之路 | PTA乙级—— 1083 是否存在相等的差 (20 分)(精简)

    1083 是否存在相等的差 (20 分) 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小),得到 N 个非负 ...

  5. C++学习之路 | PTA乙级—— 1078 字符串压缩与解压 (20 分)(精简)

    1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来 ...

  6. C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)

    1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0 ​​ A ​1 ​​ ...

  7. PAT 1073 多选题常见计分法(20)(代码+思路)

    1073 多选题常见计分法(20 分) 批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生 ...

  8. 1073 多选题常见计分法

    1073 多选题常见计分法(20 分) 批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生 ...

  9. C++学习之路 | PTA乙级—— 1006 换个格式输出整数 (15分)(精简)

    1006 换个格式输出整数 (15分) 让我们用字母 B 来表示"百".字母 S 表示"十",用 12-n 来表示不为零的个位数字 n(<10),换个格式 ...

最新文章

  1. NVIDIA DPU架构
  2. 跳出数据计算拯救人工智能之分布式逻辑
  3. mongodb--常用命令
  4. 【Spring注解系列08】@PostConstruct与@PreDestroy
  5. EXT中创建一个弹窗效果
  6. 基于node.js+MongoDB+elementui的分页功能更新优化
  7. Codeforces Round 504
  8. C语言高级编程:char、signed char 和 unsigned char的使用区别
  9. eNet 软件发布要求多多
  10. c语言 除法小数点怎么写,高精度除法小数点位数
  11. .NET,你忘记了么?(六)——再谈String
  12. Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (高级)
  13. Bootstrap学习笔记02
  14. 我收集的CS地图mod制作网址
  15. TortoiseGit 如何使用 cherry-pick
  16. 为什么使用start方法启动Java的Thread线程?
  17. 透明、柔性指纹传感器问世
  18. Codeup墓地-1123
  19. 【路径规划】基于蚁群算法求解机器人栅格地图路径规划matlab代码
  20. 倒计时java语言实现_java实现倒计时源码分享

热门文章

  1. 论文浅尝 | 区分概念和实例的知识图谱嵌入方法
  2. 修改安装路径 pip 以及修改运行路径
  3. svn中文语言包安装(最详细步骤)+Language Pack+TortoiseSVN 安装
  4. 【Java】深入理解Java线程
  5. 一些看起来简单做起来难的程序员笔试面试题集锦
  6. Solaris 11 安装图解(8)
  7. php: eclipse 编辑 php
  8. 数据结构——堆栈的C语言实现
  9. python-scrapy爬虫框架
  10. Leetcode--322. 零钱兑换