【JAVA】PAT 乙级 1058 选择题(测试点3未通过)


题目链接
批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。

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

输出格式:
按照输入的顺序给出每个学生的得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题的分数。最后一行输出错得最多的题目的错误次数和编号(题目按照输入的顺序从 1 开始编号)。如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 Too simple。

输入样例:

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) (2 b d) (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) (2 b c) (4 a b c d)

输出样例:

3
6
5
2 2 3 4

这题我用长度为5的整数数组来储存正确答案和学生的答案,下标0-4为a-b,
正确选项或学生答了某个选项,则相应的元素为1,异或正确答案和学生答案的数组,如果异或结果为1则答案错误(学生选了该选项,但不是正确答案。或学生没选该正确答案),结果为0则正确(学生选中了正确答案,或没有选错误答案)

	int check(int sgs, int[] sans) {
		if (sgs != zqgs) {
			cw++;
			return 0;
		}
		for (int i = 0; i < 5; i++) {
			if ((ans[i] ^ sans[i]) == 1) {
				cw++;
				return 0;
			}
		}
		return fs;
	}

这道题如果只用BufferedReader,最后一个样例会超时,所以用了StreamTokenizer。
但是这道题用StreamTokenizer有个问题,就是括号它一直读不出来,上网查了资料,看了看StreamTokenizer的详细代码才发现,原来StreamTokenize读取的字符范围是英文字母和160-255的字符。

    private StreamTokenizer() {
        wordChars('a', 'z');
        wordChars('A', 'Z');
        wordChars(128 + 32, 255);
        whitespaceChars(0, ' ');
        commentChar('/');
        quoteChar('"');
        quoteChar('\'');
        parseNumbers();
    }

所以可以用wordChars方法把括号添加上去

	in.wordChars('(','(');
	in.wordChars(')', ')');

虽然改用StreamTokenizer不会超时了,但是测试点3还是未通过。

如果大家有修改的办法,欢迎大家在评论区留言讨论

完整代码(测试点3未通过):

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		StreamTokenizer in = new StreamTokenizer(bf);
		in.wordChars('(','(');
		in.wordChars(')', ')');
		in.nextToken();
		int N = (int) in.nval;
		in.nextToken();
		int M = (int) in.nval;
		tm[] t = new tm[M];
		for (int i = 0; i < M; i++) {
			in.nextToken();
			int fs = (int) in.nval;
			in.nextToken();
			int gs = (int) in.nval;
			in.nextToken();
			int zqgs = (int) in.nval;
			int[] ans = new int[5];
			for (int j = 0; j < zqgs; j++) {
				in.nextToken();
				ans[in.sval.charAt(0) - 'a'] = 1;

			}
			t[i] = new tm(i + 1, fs, gs, zqgs, ans);
		}
		
		for (int i = 0; i < N; i++) {
			int fs = 0;
			for (int j = 0; j < M; j++) {
				in.nextToken();
				int sgs = in.sval.charAt(1) - '0';
				int[] sans = new int[5];
				for (int k = 0; k < sgs; k++) {
					in.nextToken();
					sans[in.sval.charAt(0) - 'a'] = 1;
				}
				fs += t[j].check(sgs, sans);
			}
			out.println(fs);
		}
		Arrays.sort(t);
		if (t[0].cw == 0) {
			out.print("Too simple");
		} else {
			out.print(t[0].cw + " " + t[0].bh);
			for (int i = 1; i < t.length; i++) {
				if (t[i].cw == t[i - 1].cw) {
					out.print(" " + t[i].bh);
				}
			}
		}
		out.flush();
	}

	static class tm implements Comparable<tm> {
		int bh;
		int fs;
		int gs;
		int zqgs;
		int[] ans;
		int cw = 0;

		tm(int b, int f, int g, int zq, int[] a) {
			bh = b;
			fs = f;
			gs = g;
			zqgs = zq;
			ans = a;
		}

		int check(int sgs, int[] sans) {
			if (sgs != zqgs) {
				cw++;
				return 0;
			}
			for (int i = 0; i < 5; i++) {
				if ((ans[i] ^ sans[i]) == 1) {
					cw++;
					return 0;
				}
			}
			return fs;
		}

		@Override
		public int compareTo(tm o) {
			if (o.cw == this.cw) {
				return this.bh - o.bh;
			}
			return o.cw - this.cw;
		}
	}

	static int sti(String a) {
		return Integer.parseInt(a);
	}

	static int[] stii(String a) {
		String[] ra = a.split(" ");
		int[] r = new int[ra.length];
		for (int i = 0; i < r.length; i++) {
			r[i] = sti(ra[i]);
		}
		return r;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 开始0. 开始 4 WINDOWS环境 4 WINDOWS程序设计选项 9 编写第一个WINDOWS程序 13 2. Unicode简介 20 字符集简史 21 宽字符和C 27 宽字符和WINDOWS 30 3. 窗口和消息 36 自己的窗口 37 WINDOWS程序设计的难点 57 4. 输出文本 59 绘制和更新 60 GDI简介 63 滚动条 83 建立更好的滚动 92 5. 图形基础 101 GDI的结构 102 设备环境 106 画点和线 121 绘制填入区域 142 GDI映射模式 148 矩形、区域和剪裁 165 6. 键盘 177 键盘基础 178 按键消息 181 字符消息 198 键盘消息和字符集 202 插入符号(不是光标) 226 7. 鼠标 234 鼠标基础 235 客户区鼠标消息 237 非客户区鼠标消息 244 程序中的命中测试 247 拦截鼠标 267 鼠标滑轮 276 8. 计时器 285 计时器入门 286 计时器的使用:三种方法 288 计时器用于时钟 295 以计时器进行状态报告 308 9. 子窗口控件 311 按钮类别 313 控件与颜色 324 静态类别 333 滚动条类别 334 编辑类别 345 列表框类别 349 10. 菜单及其他资源 363 图标、光标、字符串和自订资源 364 菜单 381 键盘加速键 407 11. 对话框 420 模态对话框 420 非模态对话框 451 通用对话框 466 12. 剪贴板 493 剪贴板的简单使用 493 复杂的剪贴板用法 507 实作剪贴板浏览器 512 13. 使用打印机 517 打印入门 518 打印图形和文本 538 14. 位图和Bitblt 557 位图入门 558 位图尺寸 559 位块传输 563 GDI位图对象 575 15. 与设备无关的位图 631 DIB文件格式 632 显示和打印 658 DIB和DDB的结合 699 16. 调色盘管理器 717 使用调色盘 717 调色盘动画 743 调色盘和真实世界图像 761 DIB处理程序库 802 17. 文本和字体 877 简单的文本输出 877 字体的背景 881 逻辑字体 884 字体列举 921 段落格式 931 有趣的东西 955 18. Metafile 967 旧的metafile格式 968 增强型metafile 976 19. 多文档界面 1034 MDI概念 1034 MDI的范例程序 1036 20. 多任务和多线程 1054 多任务的各种模式 1054 WINDOWS的多线程处理 1058 线程同步 1080 事件信号 1081 线程区域储存空间(TLS) 1091 21. 动态链接库 1092 动态链接库的基本知识 1092 各式各样的DLL讨论 1111 22. 声音与音乐 1116 WINDOWS和多媒体 1117 波形声音 1126 MIDI和音乐 1183 23. 领略Internet 1237 Windows Sockets 1237 WININET和FTP 1252
背景:受脑连接障碍和炎性细胞因子影响的认知障碍一直是包括精神分裂症、双相情感障碍和重度抑郁症在内的主要精神疾病 (MPD) 中最突出的特征。 共同点要求采用跨诊断和维度的方法来描绘 MPD 之间大脑连接、认知和炎症之间关系的潜在神经机制。 方法:从一个地点招募了 1543 名参与者,包括 1058 名患有 MPD 的人和 485 名健康对照者在这个研究中。 参与者接受了弥散张量成像和静息状态功能磁共振成像,大多数参与者(n = 1169,765 名 MPD 参与者和 404 名健康对照者)也完成了威斯康星卡片分类测试 (WCST)。 血液样本是在成像后 24 小时内从 325 名参与者那里获得的。 分数各向异性 (FA) 和区域功能连接 (FC) 分别用于测量结构和功能连接。结果:使用 IL-1β、IL-6 和 TNF-α 评估炎性细胞因子指数的差异。 WCST 缺陷与 FA 降低有关; 增加区域FC; MPDs 中 IL-1β、IL-6 和 TNF-α 升高。 额边缘-纹状体区域内重叠的结构和功能连接障碍导致 MPD 之间的认知缺陷。 中介分析表明,IL-1β 介导了 FA 和 WCST 之间的关联,IL-6 介导了区域 FC 和 WCST 之间的关系。 MPDs 之间的认知途径。 特定细胞因子的影响允许更有针对性的研究和可能更有针对性的干预措施,可能会改善 MPD 的认知。 资金声明:本研究由国家杰出青年科学基金(81725005 至 FW)、中国国家自然科学基金(81571311 至YT, 81571331 to FW), 国家重点研发计划项目 (2018YFC1311604 to YT, 2016YFC1306900 to YT, 2016YFC0904300 to FW), 国家高技术发展计划 (863) (2015AA004 to FW) (2015AA0502015 科学技术项目 (2015AA0502015) )、辽宁省教育基金会(潘登学者转FW)、辽宁省高等教育创新团队支持计划(LT2017007转FW)、中国医科大学重大专项建设计划(3110117059转FW)。 利益申报:作者报告没有生物医学经济利益或潜在的利益冲突。伦理批准声明:该研究已获得机构审查委员会的批准中国医科大学,按照赫尔辛基宣言进行。 所有实验和方法均按照批准的指南和规定进行。 所有受试者均提供书面知情同意书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值