助力PAT甲级/乙级取得满分的小技巧,STL容器
STL容器的高级玩法
写在前面:本人于2020PAT甲级取得满分(见本人其他博客),在刷题过程中我有了很多自己的小经验和技巧,在这里分享给大家,祝大家刷题顺利,早日拿到免费的PAT徽章~~
注意:这里是分享小技巧,并不是全面介绍容器,此处默认你已经掌握了容器的基本用法!
1. Vector
大名鼎鼎的Vector,动态数组嘛,用起来很方便,但是你可知道vector不仅仅是动态数组,它还可以是队列/优先队列,栈?
Vector变成队列和栈的关键函数
- erase
你会不会感到很疑惑?删除函数有什么了不起的?竟然还能玩出花样?
君莫急,且看:
vector<int>V;
V.push_back(1);
V.push_back(2);
V.push_back(3);
V.push_back(4);
对于栈很简单,使用:
V.erase(--V.end());
V.erase(V.rbegin());//与上面等价!
V.pop_back();
这就完成了删除最后一个元素操作!
立即推,vector等于stack,所以完全没必要去熟悉stack容器!
- erase变队列
V.erase(V.begin());
这样就实现了删除第一个元素,这就是vector版的队列!!
至于优先队列(自定义排序顺序),可以在所有元素进入vector以后使用sort函数自定义cmp,然后实现优先队列(效率相同!!)
sort(V.begin(),V.end(),cmp);
//cmp为自定义比较关系
+
- Vector变双端队列
V.insert(V.begin,1);
这样就在最前面插入了元素1,通过以上操作
vector在保持动态数组的同时 还是队列,双端队列,栈,优先队列!
除此之外,还有冷门Vector用法!!!!!
1.更方便的判等!
vector<int.>V1,V2;
if(V1==V2) printf(“Yes”);
else printf(“No”);
两个Vector之间可以直接用==进行判等,只有存储的元素完全相同的时候才会true
2.更方便的判断元素大小
if(V1<V2)printf("Yes");
如:
V1:1 2 2 4
V2:1 2 3 1
那么V1<V2就是true
作用:在题目要求出现不唯一的答案时,按小序列输出,通过利用sort函数可以对vector大小可以排序,然后输出第一个即可!
2.map的高级玩法**
- 用来对数字进行排序,效率无敌快!
比如:
int val;
map<int,int>Ma;
for(int i=0;i<N;i++
{scanf("%d",&val);Ma[val]++;
}
//这样得到的map就是有序系列,可以直接输出!!
for(auto it=Ma.begin();it!=Ma.end();it+){for(int j=0;j<it->second;j++){printf(" %d",it->first);}
}
强不强!!这样排序的效率远超过了set/underorder_set!!!
利用second值也可以避免重复!!!
一举两得,非常棒!!!
- Map用来哈希映射字符串
map<string,int>Ma;
map<int,string>Mb;
string s;
int index =1;
for(int i=0;i<N;i++){cin>>s;if(Ma[s]!=0)continue;//0不存数据,下标从1开始,已经映射过的就跳过,不再映射。Ma[s]=index;Mb[index]=s;index++;
}
这样就把string变成了int,访问直存直取,效率无敌!!!
3.字符串string的玩法~
1.find函数
find既可以找单个字符,也可以找 字符串
如:
除此之外,还有另外的几个find函数:
看名字就能懂他们的作用
rfind是find的逆序,find是从前往后,rfind就是从后往前找
string最优秀的是操作方便,可以直接用+进行连接,在很多题目中用起来简直舒服到爆,比如2018年真题中的运算树,递归遍历,string控制输出格式太好用了。
再比如1088题:1088 Rational Arithmetic (20分)
#include<vector>
#include<iostream>
#include<math.h>
#include<string>
#include<algorithm>
#include<string>
using namespace std;
long long gcd(long long a, long long b) {if (b == 0) return a;else return gcd(b, a%b);
}
string simple(long long a, long long b) {string ans;if ((a > 0 && b < 0) || (a < 0 && b>0))ans = "-";a = abs(a);b = abs(b);if (a == 0)return "0";if (b == 0)return "Inf";long long t = gcd(a, b);a /= t;b /= t;long long z = a / b;a -= z * b;if (z > 0 && a > 0) {ans += to_string(z) + " " + to_string(a) + "/" + to_string(b);}else if (z > 0) {ans += to_string(z);}else {ans += to_string(a) + "/" + to_string(b);}if (ans[0] == '-')return "(" + ans + ")"else return ans;
}
int main() {;long long a1, a2, b1, b2;scanf("%lld/%lld %lld/%lld", &a1, &a2, &b1, &b2);string s1 = simple(a1, a2);string s2 = simple(b1, b2);printf("%s + %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b2 + b1 * a2, a2*b2).c_str());printf("%s - %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b2 - b1 * a2, a2*b2).c_str());printf("%s * %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b1, a2*b2).c_str());if(abs(b1)==0)printf("%s / %s = Inf\n", s1.c_str(), s2.c_str());else printf("%s / %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b2, a2*b1).c_str());return 0;
}
近几年每次基本上都要考一个 字符串运用的题目。
近几年的大趋势是模板题越来越少了,以前很多题目都是固定套路,后面的题目反而简单,虽然看起来复杂一些。
近几年题目基本上都是给你一个概念, 让你读题理解,然后再利用已知知识去自由发挥emm,所以背解题模板没有用,背代码也没有用,只有通过自己不断的去理解各种知识,真正掌握熟练了才是王道。
助力PAT甲级/乙级取得满分的小技巧,STL容器相关推荐
- PAT 甲级考试终于满分了
竟然有两份证书.申通快递把证书撕坏了好气啊. 先留个坑,这应该是个经验贴,等我有时间/心情的时候再说吧.
- SAP小技巧 DOCKING容器解决分辨率问题
一 前言 通过SAP ENJOY演示中心可以学习SAP常用容器的用法(TCODE: DWDM ) 其中有5个DEMO程序介绍不同的容器 自定义容器 固定容器(DOCKING容器) 拆分器容器 easy ...
- PAT甲级考试知识点总结和一些看法
0 引言 本人今年PAT甲级考了95分,平时力扣也有再刷(大概有360题),感觉PAT主要还是面向考研党的,里面的题目其实难度是小于力扣的,但这种难度的题目浙大去年考研机试居然有20%的0分我其实不是 ...
- 2019年12月PAT甲级满分备考经验
PAT甲级满分备考经验 答题过程 备考经验 答题过程 总得来说,我觉得我幸运,碰上了一次PAT甲级题目相当简单(1085中有190人满分),最终提前一小时交卷,实时排名为35. 我按照1 2 ...
- 2020年9月PAT甲级满分必备刷题技巧
2020年7月的考试结束了,除了本次的考题更新,短期内不会更新. [7月题目的特点:首次线上考试,没出链表.树相关的模板题,第2到4题背景新颖,大大降低了抄袭历年代码的可能性,可以看作是线上考试的新趋 ...
- PAT学习资料汇总(PAT甲级、PAT顶级、PAT考试经验)
二.PAT甲级 PAT甲级真题目录(按题型整理) PAT甲级真题目录(按题型整理)_love music.的博客-CSDN博客_pat甲级真题 PAT甲[所有题目+解析+代码示例+总结]附带所有历年整 ...
- 2021.9.11周六PAT甲级考试复盘与总结
周六PAT甲级考试复盘与总结 先说结论:仍未步入"高手"行列:现在的学习节奏与方法是对的,有十万分的必要坚持下去. 题目 知识点 分数 T1 前缀和.二分 11 / 20 T2 排 ...
- 2019秋季PAT甲级考试总结:努力+策略+运气
鉴于这两天有很多网友联系我问这次考试的题解,所以我干脆就花点时间把C++题解整理出来了,见文末 经过一两个月的备战PAT,在今天终于画上了一个圆满的句号,取得了满分的成绩. 我是在南京的金陵科技学院考 ...
- PAT甲级训练合集(1-70)
本章题解跳转 考点 P1001 数字的数组表示和处理 P1002 多项式的数组表示和处理 P1003 深度优先搜素 P1004 深度优先搜素 P1005 哈希表 P1006 P1007 数组子区间求和 ...
最新文章
- php多选框怎么传值,tp3.2如何处理多选框传参和判断状态
- 【网络安全】Xred蠕虫再分析及修复工具编写
- 成绩排序 九度教程c语言,九度OJ 1089 数字反转
- 10几行代码,用python打造实时截图识别OCR
- hadoop合并日志_Hadoop深入学习:HDFS主要流程——SNN合并fsimage和编辑日志
- 免费下载IEEE论文的网站
- 多商户商城系统如何对接电商收付通?
- Python保留两位小数,并做四舍五入处理
- vb rs.RecordCount返回0的原因
- EasyMicroPlot: 一种快速进行微生物下游分析的整合R包
- 由 Apache Kylin 组建的 Kyligence 公司获得数百万美元的天使轮投资
- 读《饥饿的盛世-乾隆时代的得与失》
- FCPX注释解说文字标题插件:motionVFX mCallouts Simple 2
- shell的字符串截取
- Ramdisk虚拟内存盘,Swap分区
- UML图之类图,对象图和包图
- Vue Hello world
- MySQL用年、月、日、季度、周分别统计数据
- 儿童玩具和儿童用品美国CPC认证ASTM测试CPSIA标准大合集
- RecyclerView 源码分析
热门文章
- Python批量合并处理B站视频
- [转] slave_exec_mode=IDEMPOTENT的行为小结
- python面试整理
- 电子游戏设计与制作 第一章 计算机游戏概述
- Win10如何设置快速锁屏?电脑怎么设置离开锁屏?
- 医保结余7600亿匮
- 期货平仓/强制平仓/爆仓-股市平仓建仓
- linux /etc/motd,Linux 修改进站提示 /etc/motd
- android h5富文本编辑器,H5富文本编辑器的详细介绍
- mysql生成18位纯数字id_MySQL实现注册时随机生成数字id,类似于注册qq时随机生成qq号...