首页 > 代码库 > 九度oj 题目1014:排名
九度oj 题目1014:排名
题目1014:排名
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:9361
解决:2820
- 题目描述:
- 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。
- 输入:
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号(题目号由1到M)。
当读入的考生人数为0时,输入结束,该场考试不予处理。
- 输出:
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出。
- 样例输入:
4 5 2510 10 12 13 15CS004 3 5 1 3CS003 5 2 4 1 3 5CS002 2 1 2CS001 3 2 3 51 2 4010 30CS001 1 22 3 2010 10 10CS000000000000000001 0CS000000000000000002 2 1 20
- 样例输出:
3CS003 60CS001 37CS004 3701CS000000000000000002 20
分析:主要进行输入数据的处理。用到c_str()函数。1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <vector> 6 #include <string> 7 using namespace std; 8 9 typedef struct{10 string id;11 int score;12 } candidate;13 14 bool cmp(candidate a, candidate b){15 if(a.score != b.score)16 return a.score > b.score;17 else18 return a.id < b.id;19 }20 21 int main(){22 //N表示人数,M表示考题数,G分数线23 int N, M, G, m, num, sum;24 int i, j;25 string str;26 int s[10];27 char id[21];28 candidate stu;29 vector<candidate> v;30 while(scanf("%d %d %d", &N, &M, &G)){31 if(N == 0)32 break;33 v.clear();34 int reach = 0;35 for(i = 0; i < M; i++)36 scanf("%d", &s[i]);//每题分数37 for(i = 0; i < N; i++){38 scanf("%s %d", id, &m);39 str = id;40 sum = 0;41 for(j = 0; j < m; j++){42 scanf("%d", &num);43 sum += s[num - 1];44 }45 if(sum >= G){46 reach++;47 v.push_back(stu);48 v[reach - 1].id = str;49 v[reach - 1].score = sum;50 }51 }52 sort(v.begin(), v.end(), cmp);53 printf("%d\n", reach);54 for(i = 0; i < v.size(); i++){55 printf("%s %d\n", v[i].id.c_str(), v[i].score);//c_str()函数 56 //cout << v[i].id << " " << v[i].score << endl;57 }58 }59 return 0;60 }
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 #include <string> 5 using namespace std; 6 7 typedef struct{ 8 string id; 9 int score;10 } candidate;11 12 bool cmp(candidate a, candidate b){13 if(a.score != b.score)14 return a.score > b.score;15 else16 return a.id < b.id;17 }18 19 int main(){20 //N表示人数,M表示考题数,G分数线21 int N, M, G, m, num, sum;22 int i, j;23 string str;24 int s[10];25 candidate stu;26 vector<candidate> v;27 while(cin >> N >> M >> G){28 if(N == 0)29 break;30 v.clear();31 int reach = 0;32 for(i = 0; i < M; i++)33 cin >> s[i];//每题分数34 for(i = 0; i < N; i++){35 cin >> str >> m;36 sum = 0;37 for(j = 0; j < m; j++){38 cin >> num;39 sum += s[num - 1];40 }41 if(sum >= G){42 reach++;43 v.push_back(stu);//这里一定要注意,先在容器中创造一个结构体空间,然后在赋值44 v[reach - 1].id = str;45 v[reach - 1].score = sum;46 }47 }48 sort(v.begin(), v.end(), cmp);49 cout << reach << endl;50 for(i = 0; i < v.size(); i++){51 cout << v[i].id << " " << v[i].score << endl;52 }53 }54 return 0;55 }
总结:需要注意的是,vector容器是结构体类型的话,push_back()元素的方法
九度oj 题目1014:排名
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。