Codeforces Round #577 (Div. 2), problem: (A)
问题链接:https://codeforces.com/contest/1201/problem/A
题目大意
一个班级的学生写多项选择题。
这个班有n个学生。测试有m个问题,每个问题都有5个可能的答案(A, B, C, D或E),每个问题都有一个正确的答案。问题i的正确答案值ai分。不正确的答案得零分。
学生们记得他们在考试中给出的答案,但是他们不知道正确的答案是什么。他们非常乐观,所以他们想知道班上所有学生的最大可能总分是多少。
输入
第一行包含整数n和m(1≤n,m≤1000)——班级人数和考试题目数。
下面n行中的每一行都包含字符串si (|si|=m),描述第i个学生的答案。第j个字符表示第j个问题的学生答案(A、B、C、D或E)。
最后一行包含m个整数a1,a2,…,am(1≤ai≤1000)-每个问题正确答案的点数。
输出
打印一个整数 这个班的最大可能总分
。
分析
求出每个问题的出现次数最多的选项的个数 ✖ 对应的分数即可 求和即可。
也就是 就把每一列出现次数最多的字母数量加一下
例如1:
2 4
ABCD
ABCE
1 2 3 4
数据分析:
每一行数字的代表 某一个问题 所有选项的出现频率
如 20000 代表 第一个问题A总共出现2次
20000
02000
00200
00011
A:2$*$1
B:2$*$2
C:2$*$3
D:1$*$4
ans=16
例如2:
6 5
AAAAA
AAAAB
AAABB
AABBB
ABBBB
BBBBB
999 13 877 342 1
数据分析:
输入第一列 510000 代表 问题1 A出现5次 B出现1次
输入第三列 240000 代表 问题4 A出现2次 B出现4次
510000
420000
330000
240000
150000
A:5$*$999
B:4$*$13
C:3$*$877
D:4$*$342
E:5$*$1
ans=9051
代码
package cf;
import java.util.Scanner;
import static java.lang.Math.max;
public class AImportantExam {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int m = cin.nextInt();
int ans=0;
int[][] e = new int[m][n];
for (int i = 0; i < n; i++) {
String s = cin.next();
for (int j = 0; j < m; j++) {
e[j][s.charAt(j) - 'A']++;
}
}
// System.out.println();
// for (int i = 0; i <m ; i++) {
// for (int j = 0; j < n; j++) {
// System.out.print(e[i][j]);
// }
// System.out.println();
// }
for (int i = 0; i < m; i++) {
int a=cin.nextInt();
int theMax=max(e[i][0],max(e[i][1],max(e[i][2],max(e[i][3],e[i][4]))));
// System.out.println((char)('A'+i)+":"+theMax+"*"+a);
ans+=theMax*a;
}
System.out.println(ans);
}
}
本文地址:https://dxoca.cn/Algorithm/220.html 百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
L:30括号真多
Java是不是支持隔行书写,还是排个版吧。方便检查 
话说评论区鼠标点一下就整体insert了,希望改一下
谢谢|´・ω・)ノ
好的 解决了~!
what?这么快!怎么改的
哈哈哈 嵌套求 最大max嘛 qwq 的确,,整体insert 我看看