第五章 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 · 567 阅读 · 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 · 533 阅读 · 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 · 779 阅读 · 0 评论 -
例题5-12 221 Urban Elevations城市正视图
很巧妙的一道题,看了很长时间,也请教了同学。总之就是离散化的应用:整体思路:输入房子时,把左上角的X坐标和右上角X坐标输入到一个新的double数组中,作为一个拥有各个房子共同属性的X坐标,对他进行排序,去重(unique),这样只需要看每一个房子是否在这个区间是否可见就可以了,判断是否可见可以在这个区间里任意找一个点(原题是找中点),判断点是不是在房子里!代码如下:#includ原创 2016-01-21 14:10:02 · 607 阅读 · 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 · 2820 阅读 · 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 · 1312 阅读 · 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 · 528 阅读 · 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 · 497 阅读 · 0 评论 -
例题5-2 UVA 101 The Blocks Problems 木块问题
看了看紫书上代码分析:收获不少!解这个题用到了Vector类(非常巧妙简单):整体思路:定义一耳光Vector容器:vectorpile[maxn];这样pile算是一个二维数组,一维是确定的(一维相当于有多少个箱子),二维是不确定的(二维相当于箱子的高度),可以放一个箱子,高度就加1来判断!(判断“高度”用到了.size() 获取高度,没有数字便是0,而不是垃圾值,非常人性化)而放箱原创 2015-12-15 15:51:39 · 690 阅读 · 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 · 540 阅读 · 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 · 1039 阅读 · 0 评论