题目

题目地址:PAT 乙级 1015

题解

常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码;

在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序,因此这里需要再次理解sort方法中的第三个参数,以及它的使用细节;

关于sort的具体使用方法,可以在我之前的博文查看;

还需要最后说明的一点问题是:尽量使用 printf 和 scanf,减少 cout 和 cin 的使用,之前用cin和cout,结果时间超限了……

代码

 #include <iostream>
#include <vector>
#include <algorithm>
using namespace std; struct Stu {
int num;
int s1;
int s2;
}; bool comp(Stu x, Stu y) {
if (x.s1 + x.s2 > y.s1 + y.s2) return true;
else if (x.s1 + x.s2 == y.s1 + y.s2 && x.s1 > y.s1) return true;
else if (x.s1 + x.s2 == y.s1 + y.s2 && x.s1 == y.s1 && x.num < y.num) return true;
else return false;
} int main() {
vector<Stu> stu1, stu2, stu3, stu4;
int tmp_num, tmp_s1, tmp_s2;
Stu tmp_stu;
int N = , L = , H = ;
scanf("%d %d %d", &N, &L, &H);
while (N--) {
scanf("%d %d %d", &tmp_num, &tmp_s1, &tmp_s2);
tmp_stu.num = tmp_num;
tmp_stu.s1 = tmp_s1;
tmp_stu.s2 = tmp_s2;
if (tmp_stu.s1 >= L && tmp_stu.s2 >= L) {
if (tmp_stu.s1 >= H && tmp_stu.s2 >= H) stu1.push_back(tmp_stu);
else if (tmp_stu.s1 >= H && tmp_stu.s2 < H) stu2.push_back(tmp_stu);
else if (tmp_stu.s1 < H && tmp_stu.s2 < H && tmp_stu.s1 >= tmp_stu.s2) stu3.push_back(tmp_stu);
else stu4.push_back(tmp_stu);
}
}
sort(stu1.begin(), stu1.end(), comp);
sort(stu2.begin(), stu2.end(), comp);
sort(stu3.begin(), stu3.end(), comp);
sort(stu4.begin(), stu4.end(), comp);
printf("%d\n", stu1.size() + stu2.size() + stu3.size() + stu4.size());
for (int i = ; i < stu1.size(); i++)
printf("%d %d %d\n", stu1[i].num, stu1[i].s1, stu1[i].s2);
for (int i = ; i < stu2.size(); i++)
printf("%d %d %d\n", stu2[i].num, stu2[i].s1, stu2[i].s2);
for (int i = ; i < stu3.size(); i++)
printf("%d %d %d\n", stu3[i].num, stu3[i].s1, stu3[i].s2);
for (int i = ; i < stu4.size(); i++)
printf("%d %d %d\n", stu4[i].num, stu4[i].s1, stu4[i].s2); return ;
}

这里的代码感觉还是有些冗余,尤其是排序和输入的部分,因此再贴上经过微小改进后的代码;

 #include <iostream>
#include <vector>
#include <algorithm>
using namespace std; struct Stu {
int num;
int s1;
int s2;
}; bool comp(Stu x, Stu y) {
if (x.s1 + x.s2 > y.s1 + y.s2) return true;
else if (x.s1 + x.s2 == y.s1 + y.s2 && x.s1 > y.s1) return true;
else if (x.s1 + x.s2 == y.s1 + y.s2 && x.s1 == y.s1 && x.num < y.num) return true;
else return false;
} int main() {
vector<Stu> stu[];
int tmp_num, tmp_s1, tmp_s2;
Stu tmp_stu;
int N = , L = , H = ;
scanf("%d %d %d", &N, &L, &H);
while (N--) {
scanf("%d %d %d", &tmp_num, &tmp_s1, &tmp_s2);
tmp_stu.num = tmp_num;
tmp_stu.s1 = tmp_s1;
tmp_stu.s2 = tmp_s2;
if (tmp_stu.s1 >= L && tmp_stu.s2 >= L) {
if (tmp_stu.s1 >= H && tmp_stu.s2 >= H) stu[].push_back(tmp_stu);
else if (tmp_stu.s1 >= H && tmp_stu.s2 < H) stu[].push_back(tmp_stu);
else if (tmp_stu.s1 < H && tmp_stu.s2 < H && tmp_stu.s1 >= tmp_stu.s2) stu[].push_back(tmp_stu);
else stu[].push_back(tmp_stu);
}
}
printf("%d\n", stu[].size() + stu[].size() + stu[].size() + stu[].size());
for (int i = ; i < ; i++) {
sort(stu[i].begin(), stu[i].end(), comp);
for (int j = ; j < stu[i].size(); j++)
printf("%d %d %d\n", stu[i][j].num, stu[i][j].s1, stu[i][j].s2);
} return ;
}

这样整体代码就简洁了一些,看起来也没有那么臃肿

PAT 乙级 1015的更多相关文章

  1. PAT乙级1015

    题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312 题解 思路比较简单,核心就是定义一 ...

  2. PAT乙级 1015. 德才论 (25)

    1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Li 宋代史学家司马光在<资治通鉴&g ...

  3. PAT——乙级1015/甲级1062:德才论

    这两个题是一模一样的 1015 德才论 (25 point(s)) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德 ...

  4. pat 乙级 1015. 德才论 (25) c++

     http://39.106.25.239 个人网站 欢迎访问 交流 1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Sta ...

  5. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  6. PAT乙级真题及训练题 1025. 反转链表 (25)

    PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...

  7. PAT 乙级 1024

    题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...

  8. PAT 乙级 1017

    题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...

  9. PAT 乙级 1003

    题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...

随机推荐

  1. Luogu P3546 [POI2012]PRE-Prefixuffix 神奇的递推+哈希

    设$f[i]$表示切掉前$i$位和后$i$位后,即剩下$s[i+1]到s[n-i]$,的公共前后缀长度.此时我们发现,$f[i-1]$相对于$f[i]$少切了两个$char$,所以有$f[i-1]\l ...

  2. Java面向对象_多态性、instanceof关键字

    一.多态 分类:方法的重载与重写:对象的多态性 对象的多态性:向上转型:将子类实例转为父类实例   格式:父类 父类对象=子类实例;是自动转换 向下转型:将父类实例转为子类实例   格式:子类 子类对 ...

  3. (转)yi_meng linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别

    linux 下 ifcfg-eth0 配置 以及ifconfig.ifup.ifdown区别 原文:https://www.cnblogs.com/yi-meng/p/3214471.html这3个命 ...

  4. mysql 位操作支持

    mysql 支持位操作. & 位与 | 位或 例如:update car_ins_fee_entity set change_status=(change_status | 1) where ...

  5. 【密码学】Https握手协议以及证书认证

    1. 什么是https Https = http + 加密 + 认证 https是对http的安全强化,在http的基础上引入了加密和认证过程.通过加密和认证构建一条安全的传输通道.所以https可以 ...

  6. Spring和springMVC父子容器的关系

    部分转载自:https://www.cnblogs.com/ljdblog/p/7461854.html springMVC容器和Spring容器 为什么一定要在web.xml中配置spring的li ...

  7. ajax的jquery写法和原生写法

    一.ajax的简介 Ajax被认为是(Asynchronous(异步) JavaScript And Xml的缩写).现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax. 同步是指: ...

  8. 使用vuex管理数据

    src/vuex/store.js 组件里面使用引入store.js,注意路径 import store from 'store.js' 然后在使用的组件内data(){}同级放入store 三大常用 ...

  9. 2013 QConf上海软件开发大会总结

    带着工作中的一些疑问,我参加了在上海举办的QConf 全球软件开发大会.会议以主题的形式按分会场召开,我主要选择知名网站案例分析.大数据处理技术.高效能团队建设和金融系统架构与设计四个主题内容.三天会 ...

  10. nsight 中出现method could not be resolved 报错

    解决的方法就是现在编译选项中取消该报错. 项目右键->属性->c/c++常规->Code Analysis,选择"Use project settings"  中 ...