首页 > 代码库 > 20140913 总结

20140913 总结

今天做了一套坑爹的题....我的语文敢不敢再好一点 ==

第一题简直....我要调崩溃了,一直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 4He JiaAoHe JiaAo‘s-Xuedizhong hAOXI-sb10 5 ABCD10 10 C5 0 CD10 5 ABDX..XX..XXXX.X.XXX..XX....XX.X..X................

Sample Output

35 HE Jiaao20 HE Jiaao‘s-xuedi0 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 }

 

20140913 总结