C++与STL入门
紫书第五章
来老铁干了这碗代码
算法爱好者 终生学习践行者 雨雪刀霜阻不住 不成大神誓不休
展开
-
14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告
励志用少的代码做高效的表达题目(提交)链接→UVa-10763本题为水题,因此侧重点由解题转向优化。题意:判断第一列的数字是否与第二列的数字相同(乱序)。解题方向多样,值得探究:1、map哈希表解法:定义map<int, int> cnt;,其中cnt[i]表示学校i对应的人数增减变化量,若有人把学校i作为出发地,则cnt[i]--;若作为目的地,则cnt[i]++。最终若...原创 2020-03-10 15:59:29 · 1025 阅读 · 1 评论 -
25行代码AC——习题5-7 打印队列(Printer Queue,UVa 12100)——解题报告
励志用尽量少的代码做高效的表达。题目(提交)链接→UVa-12100题目描述:我们需要用打印机打印任务。每个任务都有1~9间的优先级,优先级越高,任务越急。打印机的运作方式:从打印队列里取出一个任务j,如果队列里有比j更急的任务,则直接把j放到打印队列尾部,否则打印任务j。每次打印都消耗一分钟的时间,但调整任务位置不消耗时间。输入:第一行:n个测试用例第二行:m1(任务个数) ...原创 2020-03-11 15:27:55 · 1924 阅读 · 0 评论 -
22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告
励志用尽量少的代码做高效的表达。题目(提交)链接→UVa-1595思路:此题本质是一道笛卡尔坐标系上的对称性问题。判定性问题:由于只要能判别图像是否左右对称即可,无需确认关于哪条垂直线对称,那么问题可以这样解决:将坐标升序排序后,若两侧坐标和都等于sum,再判断二者y值相同。就说明关于某条线对称。最开始想到用pair结构体,p.first存储x坐标,p.second存储y坐标。重写c...原创 2020-03-10 23:40:42 · 909 阅读 · 0 评论 -
15行代码AC——习题5-5 复合词(Compound Words, UVa 10391)——解题报告
励志用少的代码做高效的表达题目(提交)链接→UVA-10391本题实质是#include<string>头文件的substr()字符串分割函数与#include<algorithm>头文件的find()函数联用。基本思路:单词(字符串)存入容器后,逐位分解(substr()),查找(find())按每一位分解后其前后分别组成的字符串是否在容器中出现。 若皆出现...原创 2020-03-10 17:02:14 · 800 阅读 · 0 评论 -
17行代码AC——习题5-3 卡片游戏(Throwing cards away I, UVa 10935,约瑟夫环)_解题报告
励志用少的代码做高效的表达题目(提交)链接→UVa-10935 本题为水题,因此侧重点由解题转向优化。思路:最开始想到用string存储,利用插入,删除快速计算。但却发现如果输入>=10的数,给string赋值就非常麻烦。如:输入时我们要把11转化成"11",而输出是要把"11"再转化成11。于是换了一个思路:用vector存储,同样可以实现插入、删除等 。后知后觉:此题...原创 2020-03-10 11:12:06 · 949 阅读 · 0 评论 -
21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告
励志用少的代码做高效的表达。题目(提交)链接→UVa-1594本题为水题,因此侧重点从解题转变为优化。注意点:1、下一轮是按照上一轮的每个数做运算,但下一轮每次运算都会改变数列的值,造成运算不准确,我的做法是:事先拷贝一个数列b,用数列b的值做运算,而后赋值给a。2、我判断0序列的方法是:用#include<algorithm>中的count()函数,如果0的数量等于数组...原创 2020-03-10 09:15:27 · 2163 阅读 · 2 评论 -
21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告
题意:输入若干行代码,要求各列单词的左边界对齐且尽量靠左,单词之间至少要空一格,每个单词不超过80个字符,每行不超过180个字符,一共最多1000行。思路:1、输入内容存入二维数组2、找出每列最长的单词做域宽。3、按域宽输出单词。注意点:这道题本质就是在考get型函数处理输入+按域宽和左对齐输出。1、读取输入内容有两种方法:getline()逐行读取后用stringstream分割...原创 2020-03-09 21:43:05 · 1900 阅读 · 0 评论 -
解题报告——例题5-8 Unix is 命令(UVa 400)——26行代码解决
题目大意:读入n个字符串,按字典序排序,再按列优先输出,附加条件每行最多输出60个字符,在此条件下要求行最少。(最开始没仔细看题,以为在一行中,每个单词相隔最长单词的长度+2,最后一列单词空间长度为最长单词的长度,不够用空格补齐。o(╥﹏╥)o。)注意点:1、求行数和列数时,容易想到的方法是O(n)复杂度的遍历求法,但可以优化为复杂度为O(1)的求法。2、如果对本题求解过程有清晰的阶段划分...原创 2020-03-08 19:56:16 · 803 阅读 · 0 评论 -
比紫书优化,14行代码AC——例题 5-7 丑数(Ugly Numbers,UVa 136)——解题报告
题意:丑数是一些因子只有2,3,5的数。数列1,2,3,4,5,6,8,9,10,12,15……写出了从小到大的前11个丑数,1属于丑数。现在请你编写程序,找出第1500个丑数是什么。没有输入输出:The 1500’th ugly number is <…>.(<…>为你找到的第1500个丑数) 注意:<…>是你找到的数,输出中没有尖括号; 2、输出完应...原创 2020-03-08 16:52:05 · 892 阅读 · 0 评论 -
解题报告——例题 5-6团体队列(Team Queue UVa 540)——31行代码解决
题目大意:有t个团队的人正在排一个长队,每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后。如果没有任何一个队友排队,那么他会排到长队的队尾。输入每个团队中所有队员的编号,要求支持如下三种指令(前两种指令可穿插进行):*ENQUEUE x:编号为x的人进入长队*DEQUEUE:长队的队首出队*STOR:停止模拟对于每个DEQUEUE指令,输出出队的人的编号。样...原创 2020-03-07 21:50:14 · 1001 阅读 · 2 评论 -
解题报告——例题5-5 集合栈计算机 UVa12096
五个操作:1、PUSH:空集{}入栈2、DUP:当前栈顶元素复制一份在入栈3、UNION:出栈两个集合,然后把二者的并集入栈4、INTERSECT:出栈两个元素,然后把二者的交集入栈5、ADD:出栈两个集合,把先出栈的集合加入到后出栈的集合中,结果入栈心路历程:这道题当真卡了我好久好久,因为涉及到了4个容器的搭配使用,最开始总是搞不懂其中的逻辑,一度想要放弃,两次都从椅子上站起来不想...原创 2020-03-07 12:20:33 · 1124 阅读 · 2 评论 -
算法竞赛入门经典(第二版) | 例题5-4 反片语 (map+标准化)(UVa156,Ananagrams)
题目大意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序排列。题目(提交)链接→UVa-156没使用过该网站的同学请猛戳这里→vJudge教程储备知识:标准化:将一个字符串中所有字母化简为小写,并按其字典序排列的过程叫标准化。分析: 此题大水...原创 2020-02-26 16:09:40 · 745 阅读 · 0 评论 -
算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)
概述: 输入一个文本,找出所有不同的单词,按字典序排序,去重后,输出,单词不分大小写。 储备知识: 1、sstring头文件的用法→sstring头文件函数详解2、cctype头文件的用法→cctype头文件函数详解题目(提交)链接→UVa-10815没使用过该网站的同学请猛戳这里→vJudge教程分析一、我的思路是: 读到大写字母就转化成小写的,读到小写就存入字...原创 2020-02-24 18:59:45 · 725 阅读 · 0 评论 -
简洁明了——STL容器库之set头文件常用函数集合
简介: 1、同vector封装数组,list封装链表一样,set和map封装了二叉树(红黑树,性能优于平衡二叉树)2、有序且去重3、插入、删除、查找效率高(二叉树)4、插入or删除后迭代器仍有效5、所有容器的插入删除都需要迭代器 为了更方便、易懂, 笔者将每个函数的用法都注释在了代码中,同学们想要验证或加深印象直接复制到编译器里就可以运行。代码:#include <...原创 2020-02-24 16:28:11 · 1835 阅读 · 0 评论 -
算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)
大意:输入n,代表n个木块,输入最多n种操作类型,按类型对木块进行操作,读入quit结束输入输出格式:1、move a onto b:将a和b所在上方的方块先归位,再将a移到b所在柱子2、move a over b:仅将a所在上方的方块先归位,再将a移到b所在柱子3、pile a onto b:将b所在上方的方块先归位,再将a及其上方的所有方块移到b所在柱子4、pile a ov...原创 2020-02-24 12:21:12 · 543 阅读 · 0 评论 -
算法竞赛入门经典(第二版) | 例题5-1 大理石在哪 (普适查找)(UVa10474,Where is the Marble?)
大意:给一序列,要求先将序列排序。再给n个数字,找到每个数字在序列中的位置题目(提交)网址→UVa-10474百度翻译→百度翻译没使用过该网站的同学请猛戳这里→vJudge教程思路数组存入,sort排序,find或lower_bound查找。分析:最开始没有注意到n是有上限的,于是开了一个vector(小声哔哔,vector比数组慢了一倍有余),将vector换成数组就是最佳解...原创 2020-02-22 18:19:36 · 743 阅读 · 0 评论 -
快来mark! 结构体重载运算符大全(运算、比较、赋值、输入输出)
学习紫皮书的结构体重载时,刘先生只给了加法、输出两种重载方式,成功激发了笔者的探索欲(不学懂心痒痒系列)。但当笔者网搜时,弹出的结果可真是千奇百怪、五花八门。有定义在结构体里的, 有定义在外面的, 有缺比较的,有缺输入输出的,简直惨不忍睹。让人头晕眼花。经历了漫长的修炼,笔者终于mark齐了统一格式的全部的运算符重载,分享给大家,让我们一起:吧!注:笔者采用结构体内定义的方式,将运算符分...原创 2020-02-22 12:53:55 · 5626 阅读 · 1 评论