首页 > 代码库 > 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 总结