标签:style blog color io os 使用 ar strong for
今天做了一套坑爹的题....我的语文敢不敢再好一点 ==
第一题简直....我要调崩溃了,一直WA90,后来发现:原来我是在输出的时候才把名字改规范,所以在排序的时候wa掉了
改成读入的时候就变规范就好了
sheet
描述
八月是个悲惨的月份。先不谈炎热的天气,对于新生来说,八月意味着军训;而对于高一高二的同学来说,八月意味着入学考试。而考试就意味着改卷,改卷也就意味着答题卡。不幸的是,学校读答题卡的机器的评分软件坏了,HJA就被老师要求写一个评分的程序。
软件需要读入学生的姓名、试题答案以及学生的答题卡信息。
学生姓名
学校的信息管理系统中存储了所有学生的姓名,一共名学生。系统分别使用两个字符串来存储学生的姓氏和名字。字符串中只包含大写和小写的英文字母、连字符(-,ASCII码为45)以及撇号(’,ASCII码为39)。如果两个字符串只有大小写的区别,那么两个字符串视为相同的。比如,”Orz-Hja”和”oRZ-hJa”视为相同的字符串。保证信息管理系统中不存在姓氏和名字均相同的两个学生。姓氏的标准格式为字母全部大写,名字的标准格式为首字母大写,其余字母小写。
试题答案
入学考试一共道选择题,均为不定项选择题。选项共四个,A、B、C和D,标准答案选项的数量为个。不同题目的分值可能不同。每道题有两个分值,设为满分和部分分,保证部分分不超过满分。只有当学生的答案与标准答案完全一致时才能获得满分;当学生的答案不与标准答案完全一致,但是没有选择错误选项,且选择了至少一个选项时才能获得部分分;对于其他情况,不得分。比如:试题答案选项为ACD,只有当学生答案为ACD时才能获得满分,如果学生答案为A、C、D、AC、AD或CD则可以获得部分分,其他情况均不得分。
答题卡
一个学生的答题卡占四行,可以视为四个字符串。四个字符串从左往右数的第个空为第题A、B、C和D这四个选项的方框是否被填涂,X代表填涂,.代表未填涂。比如:
XX.
.X.
...
X..
则表示第一题选择AD,第二题选择AB,而第三题没有选择。
请你根据上述的信息,计算每位学生的得分,并将学生按照成绩排序输出。对于成绩相同的学生,按照姓氏串标准格式的字典序排序。对于姓氏相同的学生,按照名字串标准格式的字典序排序。
Input
输入数据第一行包含两个整数和,分别表示学生数和试题数。
接下来行,每行描述一位学生。第行有两个字符串,分别为第位学生的姓氏和名字。注意给定的姓氏和名字不一定符合标准格式,但是不含非法字符。
接下来行,每行描述一道试题。第行有两个非负整数和一个字符串,分别为第道试题的满分、部分分以及答案串。答案串仅含有”A”、”B”、”C”和”D”四种字符,且每个字符最多出现一次。答案串中含有的字符即为该题的答案选项。
接下来份答题卡,每份四行,按照读入顺序描述一位学生的答题卡。两份答题卡之间用一个空行隔开。
Output
输出一共行,按照问题描述中排序的顺序输出位学生的信息。每行首先输出该学生的分数,然后按标准格式输出该学生姓氏和名字串。三项信息之间用一个空格隔开。
Sample Input
3 4
He JiaAo
He JiaAo‘s-Xuedi
zhong hAOXI-sb
10 5 ABCD
10 10 C
5 0 CD
10 5 ABD
X..X
X..X
XXX.
X.XX
X..X
X...
.XX.
X..X
....
....
....
....
Sample Output
35 HE Jiaao 20 HE Jiaao‘s-xuedi 0 ZHONG Haoxi-sb
1 #include <cstdio>
2 #include <string>
3 #include <cstring>
4 #include <iostream>
5 #include <algorithm>
6 using namespace std;
7
8 const int MAXN = 100+10;
9
10 int n, m, t_len;
11 char ch[4][MAXN], t_trash[MAXN], t_str[4];
12
13 inline bool isCap(char c){
14 return ‘A‘ <= c && c <= ‘Z‘;
15 }
16
17 inline bool isIni(char c){
18 return ‘a‘ <= c && c <= ‘z‘;
19 }
20
21 struct Test{
22 bool isAns[4];
23 int ak, hk, ansNum;//all kill & half kill
24
25 Test(){
26 memset(isAns, false, sizeof(isAns));
27 ansNum = 0;
28 }
29 }t[MAXN];
30
31 struct Student{
32 int score;
33 string first, second;
34
35 friend bool operator < (const Student& A, const Student& B){
36 if (A.score != B.score) return A.score > B.score;
37 if (A.first != B.first) return A.first < B.first;
38 return A.second < B.second;
39 }
40
41 void update(){
42 for (int tId=0; tId<m; tId++){
43 int t_num = 0;
44
45 for (int aId=0; aId<4; aId++){
46 if (not t[tId].isAns[aId] && ch[aId][tId]==‘X‘){
47 t_num = 0;
48 break;
49 }
50 if (t[tId].isAns[aId] && ch[aId][tId]==‘X‘)
51 t_num ++;
52 }
53
54 if (t_num == t[tId].ansNum) score += t[tId].ak;
55 else score += t_num ? t[tId].hk : 0;
56 }
57 }
58 }s[MAXN];
59
60 int main(){
61 freopen("sheet.in", "r", stdin);
62 freopen("sheet.out", "w", stdout);
63
64 scanf("%d %d\n", &n, &m);
65 for (int i=0; i<n; i++){
66 cin >> s[i].first >> s[i].second;
67 t_len = s[i].first.length();
68
69 for (int j=0; j<t_len; j++)
70 if (isIni(s[i].first[j])) s[i].first[j] -= 32;
71
72 t_len = s[i].second.length();
73 for (int j=0; j<t_len; j++)
74 if (isIni(s[i].second[j]) || isCap(s[i].second[j])){
75 if (isIni(s[i].second[j])) s[i].second[j] -= 32;
76 for (int k=j+1; k<t_len; k++)
77 if (isCap(s[i].second[k]))
78 s[i].second[k] += 32;
79 break;
80 }
81 }
82
83 for (int i=0; i<m; i++){
84 scanf("%d %d %s\n", &t[i].ak, &t[i].hk, t_str);
85 t_len = strlen(t_str);
86 for (int j=0; j<t_len; j++)
87 t[i].isAns[t_str[j]-‘A‘] = true, t[i].ansNum ++;
88 }
89
90 for (int i=0; i<n; i++){
91 for (int j=0; j<4; j++)
92 fgets(ch[j], sizeof(ch[j]), stdin);
93 if (i != n-1) fgets(t_trash, sizeof(t_trash), stdin);
94 s[i].update();
95 }
96
97 sort(s, s+n);
98 for (int i=0; i<n; i++)
99 cout<< s[i].score << " " << s[i].first << " " << s[i].second << endl;
100 }
标签:style blog color io os 使用 ar strong for
原文地址:http://www.cnblogs.com/cjhahaha/p/3970334.html