码迷,mamicode.com
首页 > 其他好文 > 详细

20140913 总结

时间:2014-09-13 21:16:55      阅读:292      评论:0      收藏:0      [点我收藏+]

标签: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 }

 

20140913 总结

标签:style   blog   color   io   os   使用   ar   strong   for   

原文地址:http://www.cnblogs.com/cjhahaha/p/3970334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!