
第五章 C++与STL入门 (例题)
aozil_yang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
例题5-1 UVA 10474 Where is the Marble?大理石在哪?
虽然是一个例题,虽然是一道非常简单的题目,但自己还是Wrong answer了一次,还是要写点什么的: 题意非常好理解,看看原文就可以了: 整体思路,按样例格式输入数据后,先排序,在搜索,用到了sort 和 lower_bound函数: 自己主要错在lower_bound上面了: 这个函数是搜索一个数组:找到第一个位置比输入指定数据大或者相等的位置(注意:位置是从0开始的)所以该函数自然和原创 2015-12-15 01:34:00 · 600 阅读 · 0 评论 -
例题5-6 UVA 540 Team Queue团体队列
这个题又展示了queue: 整体思路: 输入的编号用map映射到团队编号中,在然后就是输入命令: 入队命令: 用 t 记录输入x的团队编号,在q2[t]找到x团队内,如果是空的话,就把整个团队加入到整个队列中,然后再把x加入到x团队中! 出队命令: 先用t记录队首的团队编号,在把队首的团队(q2[t])的队首去掉,如果该团队为空,则把整个团队去掉,依次类推。。 #include #i原创 2015-12-22 21:43:15 · 564 阅读 · 0 评论 -
例题5-5 UVA 12096 The SetStack Computer集合栈计算机
有关于栈的一道题,看了很长时间,还是晕晕乎乎,记录一下自己的一点收获吧! 首先定义了个typedef setSet用来后面开空集合方便:开空集合直接Set()就可以了! 接着用到了mapIDcaches就是把Set与int 一 一对应,这里的int也就是Set集合的ID, 然后又开了一个VectorSetcaches用来存储Set集合 然后开一个stacks建立一个栈,后面的一系列命令全都原创 2015-12-21 20:41:45 · 812 阅读 · 0 评论 -
例题5-12 221 Urban Elevations城市正视图
很巧妙的一道题,看了很长时间,也请教了同学。总之就是离散化的应用: 整体思路: 输入房子时,把左上角的X坐标和右上角X坐标输入到一个新的double数组中,作为一个拥有各个房子共同属性的X坐标,对他进行排序,去重(unique),这样只需要看每一个房子是否在这个区间是否可见就可以了,判断是否可见可以在这个区间里任意找一个点(原题是找中点),判断点是不是在房子里! 代码如下: #includ原创 2016-01-21 14:10:02 · 641 阅读 · 0 评论 -
例题5-10 UVA 207 PGA Tour Prize Money PGA巡回赛的奖金
这个题真是快把自己折磨疯了,在学校因为要复习,折腾了10天才AC,结果电脑出了点问题代码数据全部丢失,放假后又写了一遍,结果不断RE一天,唉! 这个题的题意就不说了,紫书上说的很详细了,关键是一点,什么时候分配奖金结束,是等那70个奖金比例全部分配结束后就不分了,哪怕最后一个比例分给了10个并列的,也只分一个,后面就不分了(只要让sum_mon加0就行了!) 整体思路: 1.开一个结构体记录原创 2016-01-19 17:36:17 · 2881 阅读 · 0 评论 -
例题5-11 UVA 814 The Letter Carrier’s Rounds邮件传输代理的交互
书中的大体思路就是: 建立一个setaddr用来存放邮箱的全称,用在后面检测是否输出(检测是否存在!) vectormta用来存放需要连接的MTA,按照先后顺序push_back, setvis则是用在输入时检测是否存在重复的收件人。 map >dest则是用来与前面的vectormta相匹配,这个是mta里面的指定用户,存放的是邮箱全称 之所以后面有个getline(cin原创 2016-01-19 10:49:07 · 1386 阅读 · 0 评论 -
例题5-4 UVA 156 Ananagrams反片语(映射map)
书上的一道例题,主要展示了map的应用,收获非常多。 整体思路: 输入一个字符串,先把这个字符串存到第一个vector中当作原始数据,开一个临时字符串s记录原始字符串的小写格式和字母按字典序排序,把s当作map的下标来映射,如果发现数值为0,就说明还没有,则cnt[r]++,如果不是0,则继续加,那么最后,cnt[r] = 1的一定出现一次的字符串, 也就是所需的答案了! #include原创 2015-12-17 16:31:02 · 550 阅读 · 0 评论 -
例题5-9 UVA 1592 Database数据库
本来很简单的一道题,却一直RE,查了很长时间才发现是Vector数组开小了,(我日1) 我的思路: typedef long long ll; map是把string 映射成ID(long long 类型),vectorv_str;这个vector是存放字符串的,用来判断是第几个ID(这个方法在前面的stack例题中用到了) mapp2;是p2是用来把字符串ID映射成行数r,vecto原创 2015-12-30 14:57:53 · 533 阅读 · 0 评论 -
例题5-2 UVA 101 The Blocks Problems 木块问题
看了看紫书上代码分析:收获不少! 解这个题用到了Vector类(非常巧妙简单): 整体思路:定义一耳光Vector容器:vectorpile[maxn];这样pile算是一个二维数组,一维是确定的(一维相当于有多少个箱子),二维是不确定的(二维相当于箱子的高度),可以放一个箱子,高度就加1来判断!(判断“高度”用到了.size() 获取高度,没有数字便是0,而不是垃圾值,非常人性化) 而放箱原创 2015-12-15 15:51:39 · 734 阅读 · 0 评论 -
例题5-8 UVA 400 Unix Is命令
记录一下代码的巧妙之处吧 1.计算列数,因为最后一列为M个字符,前面的列都是M+2个字符,但总字符长度是60个字符,所以列数为(60 - M) / (M+2) + 1; 2.计算行数:假设有19个元素吧,5个一行,那么19/5 = 3 但是有4行,所以最后要加1,在比如说有20个元素 20/5+1 = 5 但只有4行,所以要(20-1)/5+1;所以猜测数学表达式为 (n-1) / col原创 2015-12-29 12:59:13 · 567 阅读 · 0 评论 -
例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)
这里综合运用了Set 和 优先队列: 整体思路: 凡是2,3,5的倍数的都是丑数,所以可以开一个优先队列(整数越小,优先级越高),先插入1,在插入用1乘以2,3,5得到2,3,5的倍数,然后把优先队列的.top去掉,不断取top直到1500个为止: 收获:常用优先队列(整数越小,优先级越高): priority_queue,greater >pq; #include #includ原创 2015-12-22 23:35:42 · 1077 阅读 · 0 评论