3.aoapc2ch8习题
秦始皇吃花椒
这个作者很懒,什么都没留下…
展开
-
[贪心] UVa1615 高速公路 (区间选点问题)
题目 给定平面上n(n≤10510510^5)个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的 每个点,都有一个选出的点离它的欧几里德距离不超过D。 思路 这道题的思路可是我自己一个人想出来的哦。 以每个点为圆心,以D为半径画圆,会和x轴交于两点。所以能让这个点够得到的高速公路出口,就只会在这两点之间运动了。这不就变成区间选点了吗,而且本题只让统计选点数,更简单,一个循环三行代码...原创 2018-06-11 23:32:38 · 256 阅读 · 0 评论 -
[贪心] UVa1614 股市 (结论题)
题目 输入一个长度为n(n<=100000)的序列a,满足1<=aiaia_i<=i,要求确定每个数的正负号,使得所有数的和为0. 思路 1.首先我们需要证明,对于满足1≤aiaia_i≤i的序列,1~ sum[i]的任意一个整数都可以用a[1~i]的和表示。证明方法是数学强归纳法: 假设对于任何n≤k,上述结论成立。那么只需证明n=k+1也成立即可,即sum[k]+...原创 2018-06-10 23:53:46 · 261 阅读 · 1 评论 -
[二分] UVa1616 商队抢劫者(小数变分数)(小数精度问题)
题目 思路 主要思路还是不难想的,二分即可。 1.本题的解是呈单调性的,所以可以用二分查找解。需要注意的是,本题最后要求输出分数,就很麻烦,不能用传统的整数二分,而应使用以eps为基本单位的小数二分。意思也就是,当L和R仅差一个eps时,停止二分。 2.代码的eps,在很多题中常见,代表的是小数精度,理解为小数的“单位1”。 3.小数变分数:本题采用的是暴力枚举分母的方法,因为分...原创 2018-06-17 19:36:01 · 365 阅读 · 0 评论 -
[构造法] UVa1611 起重机 (冒泡排序式直接构造解)
题目 思路 主要思想是冒泡排序,逐步构造解。 (其实这类不求最优解,只限制次数的题,大多都是构造法) 当遍历到数字i时,此时1~i-1已经排好序,在长度为n-i+1的未排序区间中,记i前面的元素的个数为ci。 1.若ci <= (n-i+1)/2: 直接将i前面的未排序区间和从i开始长度为ci的未排序区间进行交换,即可把i交换到第i个位置。 2.若ci > (n-...原创 2018-06-10 00:45:21 · 372 阅读 · 0 评论 -
[构造法] UVa11925 Generating Permutations 生成排列 (逆向思维)
题目 给出一个排列,问从排列1,2,…,n转换到所给排列需要的操作。 操作1:交换前两个元素。 操作2:将第一个元素放到最后。 思路 1.逆向思维转化问题:(因为(2)更便于处理) (1)由1,2,3,4 —>>> 4,2,3,1 所用操作:1.交换前两个元素。 2.将最前元素移到最后。 (2)由4,2,3,1 —>>> 1,2,3,4 ...原创 2018-06-10 00:28:53 · 214 阅读 · 0 评论 -
[模拟] UVa177 折纸痕(点,线的绕点旋转)
题目 思路 本题的思路其实通过观察图形,很容易想出来的。即维护两个点s和rot,每次将整个图形绕rot点顺时针选择90度,并将rot点更新为旋转后的s点即可。 关键在于横竖线的表达与数据结构问题。陈锋所采用的方法是:用start, end, vertical来描述一条线,随后对线的操作即为对start, end两个点的操作,以及极其重要的normalize函数。 对于平面几何点绕点旋...原创 2018-06-17 09:23:13 · 577 阅读 · 0 评论 -
[复杂模拟] UVa10366 龙头滴水(需要一定的推理能力)
题目 思路 (思路来自,aoapc习题选解,陈锋) 1.基本工具: 如果有两个挡板X和Y,X不高于Y,并且X和Y之间没有比Y还高的挡板,那么X左边来的水要流到Y,在接触Y之前,会形成一个阶梯形状。也就是说,从X流到Y所需要的时间就是阶梯下方的面积。 2.回到题目,考虑X=0的左右两边最高的挡板高度LH、RH,以及其位置(LHi, RHi)。 3.如果LH == RH ...原创 2018-06-16 23:20:12 · 371 阅读 · 0 评论 -
[字符串] UVa1610 Party Games 聚会游戏(简单模拟)
题目 给出n个串(n为偶数); 要构造一个串,使n串中有一半小于等于它,另外一半大于它; 要求这个串长度尽量小,同时字典序小; 思路 细节较多使人烦躁的模拟题而已 代码 #include <cstdio> #include <cstdlib> #include <algorithm> #include <string> #inc...原创 2018-06-09 00:17:48 · 287 阅读 · 0 评论 -
[贪心] UVa1149 Bin Packing 装箱(水题)
题目 给一些垃圾的数目和大小,以及垃圾箱的容量,用最少的垃圾箱子将这些垃圾装进去,注意每个垃圾箱最多只能装两个垃圾。 思路 将重量排序,每次选最大者。 并且能再装一个就装,并且要装剩余容量能装的最大的。 本题用set实现,在效率要求不高的情况下还是蛮方便的。 代码 #include <cstdio> #include <set> #include <...原创 2018-06-01 00:03:14 · 212 阅读 · 0 评论 -
[贪心] UVa12545 Bits Equalizer 比特转换器
题目 可以进行三种操作。一、将0变成1;二、将问号变成0或者1;三、交换两个字符;用最少的步骤将S串变成T串。不行就输出-1。 思路 本题从代码角度,无非四种行为: 交换两个非”?”且与目标态不同元素。 对于一个”?”k,再找一个非”?”元素i,i满足目标态与k不同,且i与目标态不同。将k变成i,并交换。 对于一个”?”,将其变为目标态。 对于一个与目标态不同且为”0”的,将其变为目标态...原创 2018-05-31 23:55:30 · 174 阅读 · 0 评论 -
[贪心] UVa11491 Erasing and Winning 奖品的价值 (类单调栈)
题目 > Sample Input 4 2 3759 6 3 123123 7 4 1000000 0 0 > Sample Output 79 32300 思路 类比单调栈,输入时将元素一个个插到数组末尾,由于位越高的数越大越好,每次进栈的时候做类似单调栈操作,就是一直保持数组降序单调性,同时每删去一个数耗一点d。 最后就有两种情况: 点数用完...原创 2018-06-07 21:51:26 · 479 阅读 · 1 评论 -
[枚举] UVa1618 弱键 (预处理)
题目 给出k(最大5000)个不同整数组成的序列,判断是否存在4个整数Np,Nq,Nr,Ns(1&amp;lt;=p&amp;lt;q&amp;lt;r&amp;lt;s&amp;lt;=k)Np,Nq,Nr,Ns(1&amp;lt;=p&amp;lt;q&amp;lt;r&amp;lt;s&amp;lt;=k)N_p, N_q, N_r, N_s原创 2018-06-14 07:26:29 · 271 阅读 · 0 评论 -
[枚举] UVa1312 球场 (离散化)(技巧枚举典例)
题目 思路 本题的关键就在于枚举的技巧和离散化。 1.离散化:对于一个最大的正方形,其必然至少有两条边上有点,因为没有的话还可以继续扩展。这样就直接将题目给的10000x10000的数据范围离散到了100个树。 2.技巧枚举:枚举正方形对边而不是起始点和边长。首先枚举上边和下边,最后枚举左边和右边。注意枚举左边和右边时,只需在已找到上边下边范围内,找黑点作为分隔符,随后分割成几部分...原创 2018-06-14 01:53:23 · 308 阅读 · 0 评论 -
[预处理] UVa1619 感觉不错 (单调栈)(预处理典例)
题目 思路 1.正确思路:利用单调栈,求出每个元素左右第一个比它小的元素位置,然后遍历每个元素,以其作为最小值,与最优解比较即可。理解本题预处理的思想。 2.注意点:本题中的单调栈,置换时应是A[p[t-1]] >= A[i] 而非 A[p[t-1]] > A[i],原因是答案的段越长越好。(例如,4 7 3 3,若只是>的话,最优解为4 7 3,而非4 7 3 3)因...原创 2018-06-14 00:21:33 · 314 阅读 · 1 评论 -
[滑动窗口] UVa11536 最小子序列 (二分滑窗长度)
题目 思路 这题就很easy了,了解一下二分滑窗长度的方法为主要。 1.根据题目给的公式,算出整个A[i]。 2.由于滑窗长度的解存在单调性,具体来说是若L = a时不成立,L=b时成立,那解必然在(a,b]中。所以用二分查找查找解,然后根据滑窗长度遍历一遍,此处的遍历有点像Shuffle那道题。 代码 #include <cstdio> #include <...原创 2018-06-13 18:21:36 · 640 阅读 · 0 评论 -
[贪心] UVa1617 笔记本 (推理)
题目 思路 这道题我的思路好像跟别人的不太一样。 首先,区间按终点排序,终点相同按起点。 随后对于每一个区间,执行如下操作: (1)查找A[i].a−1 A[i].b−1A[i].a−1 A[i].b−1A[i].a-1 ~ A[i].b-1范围内,有没有已经被占用的时间段。如果有,那么这个时间段后面紧接的时间段是否是空闲,是的话在此插入。(代码是A[i].a是因...原创 2018-06-13 00:39:40 · 250 阅读 · 1 评论 -
[贪心] UVa1153 顾客是上帝 (很巧妙的贪心)
题目 有n(n≤800000)个工作,已知每个工作需要的时间qi和截止时间di(必须在此之前完 成),最多能完成多少个工作?工作只能串行完成。第一项任务开始的时间不早于时刻0。 思路 很强的贪心。 先把任务按截止时间排序,截止时间相同的话再按花费时间排,然后一个个做就行了。 这里需要注意,也是我没想到的是,对于一个遍历到它不能完成的任务,要检查之前“假定完成”的任务里,有没有耗费时间比这...原创 2018-06-12 01:37:37 · 417 阅读 · 1 评论 -
[暴力枚举] UVa10570 外星人聚会 (本题价值--)
题目 N个外星人围成一桌坐下,有序的排列指N在N-1与N+1中间,现在给出一个序列,问至少交换几次可以得到有序的序列。5 思路 这道题就有点迷了。。 按这个数据范围,铁铁的是暴力枚举。但是不感觉紫书这一章的习题该考暴力枚举。 就说暴力枚举吧,总感觉枚举的方法也很有问题。AC代码是看别人的写的,每次选一个数作为序列起点,这样一个一个排下去。然后代码2是我之前的思路,每次选一个位置作为起点,...原创 2018-06-12 01:00:31 · 315 阅读 · 0 评论 -
[贪心] UVa1612 猜名次(浮点数精度问题)
题目### 思路 1.读题:本题的题目需要好好理解一下,刚开始给的是ID依次1~ n的得分,然后再给的是rank1~ rank n的ID,题目说的不是很清楚。 2.基本思路就是贪心。为了使后面选手的选择空间更大,rank靠前的选手因尽能力分高,这道题就仅此而已了。另外ID并列的情况也很容易分析,详情可以看代码。 3.本题要考虑浮点数精度的问题。比较明智的做法是,由于给的和输出的都是两位小数...原创 2018-06-11 01:19:24 · 338 阅读 · 0 评论