PAT解题1015
来源:互联网 发布:申通快递软件下载 编辑:程序博客网 时间:2024/05/08 16:45
1015. 德才论 (25)
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
输入格式:
输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取最低分数线,即德分和才分均不低于L的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线L的考生也按总分排序,但排在第三类考生之后。
随后N行,每行给出一位考生的信息,包括:准考证号、德分、才分,其中准考证号为8位整数,德才分为区间[0, 100]内的整数。数字间以空格分隔。
输出格式:
输出第1行首先给出达到最低分数线的考生人数M,随后M行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
输入样例:14 60 8010000001 64 9010000002 90 6010000011 85 8010000003 85 8010000004 80 8510000005 82 7710000006 83 7610000007 90 7810000008 75 7910000009 59 9010000010 88 4510000012 80 10010000013 90 9910000014 66 60输出样例:
1210000013 90 9910000012 80 10010000003 85 8010000011 85 8010000004 80 8510000007 90 7810000006 83 7610000005 82 7710000002 90 6010000014 66 6010000008 75 7910000001 64 90
解答:
本题最初想法是用结构体储存信息,然后对于不同种类的学生分别排序,最后分别输出。
调试后发现时长过长,应该是排序算法的问题。
在网上找到了代码,发现比自己写的要简单很多。
同时解析一下sort()库函数。
知识点1:vector
vector是c++提供的一种数据结构,也就是一个类,动态数组。
要有头文件<vector>
主要方法如下:
1.push_back 在数组的最后添加一个数据2.pop_back 去掉数组的最后一个数据 3.at 得到编号位置的数据4.begin 得到数组头的指针5.end 得到数组的最后一个单元+1的指针6.front 得到数组头的引用7.back 得到数组的最后一个单元的引用8.max_size 得到vector最大可以是多大9.capacity 当前vector分配的大小10.size 当前使用数据的大小11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值12.reserve 改变当前vecotr所分配空间的大小13.erase 删除指针指向的数据项14.clear 清空当前的vector15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)17.empty 判断vector是否为空18.swap 与另一个vector交换数据
3.2 详细的函数实现功能:其中vector<int> c.
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器
声明迭代器:vector<student>::iterator itr;知识点2 sort()函数
使用时要<algorithm>头文件
sort(起始指针,结束指针)默认升序排列
如果要降序,调用sort(begin,end,compare);
其中compare为你自己写的函数;
- #include<vector>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- struct student //结构体
- {
- int kaohao;
- int defen;
- int caifen;
- int zongfen;
- };
- bool compare(student a,student b) //比较a在b前则返回true,表示a在b前面
- {
- if(a.zongfen>b.zongfen)
- return true;
- else if(a.zongfen == b.zongfen)
- {
- if(a.defen>b.defen)
- return true;
- else if(a.defen==b.defen)
- {
- if(a.kaohao<b.kaohao)
- return true;
- }
- }
- return false;
- }
- int main()
- {
- vector<student> v1,v2,v3,v4;//表示四类考生
- student stu;//学生信息临时保存
- int count=0;//达标的学生总数
- int N,L,H;
- //cin>>N>>L>>H;
- scanf("%d %d %d",&N,&L,&H);
- int K,D,C;
- while(N--)
- {
- //cin>>K>>D>>C;
- scanf("%d%d%d",&K,&D,&C);
- stu.kaohao = K;
- stu.defen = D;
- stu.caifen = C;
- stu.zongfen = D+C;
- if(D>=L && C>=L)
- {
- count++;
- if(D>=H && C>=H)
- v1.push_back(stu);
- else if(D>=H && C<H )
- v2.push_back(stu);
- else if(D<H && C<H && D>=C)
- v3.push_back(stu);
- else
- v4.push_back(stu);
- }
- }
- printf("%d\n",count);
- sort(v1.begin(),v1.end(),compare);
- sort(v2.begin(),v2.end(),compare);
- sort(v3.begin(),v3.end(),compare);
- sort(v4.begin(),v4.end(),compare);
- vector<student>::iterator itr;
- for(itr=v1.begin();itr!=v1.end();itr++)
- printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen);
- for(itr=v2.begin();itr!=v2.end();itr++)
- printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen);
- for(itr=v3.begin();itr!=v3.end();itr++)
- printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen);
- for(itr=v4.begin();itr!=v4.end();itr++)
- printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen);
- system("pause");
- return 0;
- }
- PAT解题1015
- 浙大PAT basic level 解题1011-1015
- PAT解题报告索引
- PAT-1010解题报告
- PAT-1021解题报告
- PAT 解题报告
- pat解题报告【1076】
- pat解题报告【1073】
- pat解题报告【1078】
- pat解题报告【1082】
- pat解题报告【1074】
- PAT解题1012
- PAT解题1013
- PAT解题报告A1111
- PAT解题报告A1087
- PAT乙级解题报告目录
- 解题报告-PAT-List Leaves
- 解题报告-PAT-File Transfer
- UIAlertController进行代替UIAlterView和UIActionSheet
- Android RecyclerView 使用完全解析 体验艺术般的控件
- cocos2dx 调用java 代码
- GetProcAddress 出错,返回NULL(127)
- 欢迎使用CSDN-markdown编辑器
- PAT解题1015
- UML - 类图的关系总结
- 4GridView MainActivity.java
- 博客开通 坚持做自己懒得做但是正确的事情
- Bzoj1833:[ZJOI2010]count 数字计数:数位dp
- PL/SQL连接数据库配置
- LIST has a list (母函数)
- Java虚拟机解析篇之---内存模型
- iOS开发中怎么获取设备的唯一标识