摘要: 紫书上有很明显的笔误, 公式写错了。g(k, i)的那个公式应该加上c(k-1)而不是c(k)。如果加上c(k-1)那就是这一次所有的红气球的数目, 肯定大于最下面i行的红气球数我用的是f的公式, 我觉得这个稍微比f好理解一点。f(k, i) 表示k小时之后最上面i行... 阅读全文
posted @ 2018-04-30 16:55 Sugewud 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 解法和合并果子是一样的, 每次取最小的两个, 更新答案, 加入队列#include#include#define REP(i, a, b) for(int i = (a); i , greater > q; REP(i, 0, n) scanf("%d", &x),... 阅读全文
posted @ 2018-04-30 16:11 Sugewud 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 这道题让最大值最小, 显然是二分答案当题目求的是最大值最小, 最小值最大, 这个时候就要想到二分答案为什么可以二分答案呢, 因为这个时候解是单调性的, 如果简单粗暴一点就全部枚举一遍, 验证答案。但是因为答案满足单调性, 可以用二分的方法来”枚举“, 复杂度可以从n降... 阅读全文
posted @ 2018-04-30 15:46 Sugewud 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 这道题用了数形结合, 真的牛逼, 完全想到不到还可以这么做因为题目求的是平均值, 是总数除以个数, 这个时候就可以联系到斜率, 也就是说转化为给你一堆点, 让你求两点之间的最大斜率要做两个处理(1)去掉上凸点, 因为上凸点是无论如何都不会为最优解的(2)去掉之后每两个... 阅读全文
posted @ 2018-04-30 12:20 Sugewud 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 设切割的区间为(j, i), 注意两边都是开区间。然后可以预处理出以i为起点的最长连续递增的长度和以j为终点的最长连续递增的长度。大致思路就是枚举i,右边这一侧的最优值就知道了, 然后这道题的关键就是就是j取哪里。(1)去掉干扰元素, 这一步非常的关键, 设题目给的数... 阅读全文
posted @ 2018-04-29 20:03 Sugewud 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 滑动窗口这个方法名字非常形象, 先是窗口的右指针尽量往右滑, 滑不动了就滑窗口的左指针, 滑到右指针又可以开始滑动为止。这道题是要记录滑的过程中最大的窗口长度, 限制条件是窗口中不能出现重复的值。重复的值有两种判断方法。一种是set, 其实就是开个vis数组, 但是数... 阅读全文
posted @ 2018-04-29 16:06 Sugewud 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 这道题目用扫描法扫描法:在枚举的过程中维护一些重要的量, 从而简化计算这道题用到了极角, 叉积, 高一的我表示一脸懵逼不过自己去百度了一下好像大概看得懂。这道题我还有一些疑问, 先这样吧#include#include #include#define REP(i, a... 阅读全文
posted @ 2018-04-29 15:38 Sugewud 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 这道题用到了等价转换的思想所有要运到a1的酒, 都要经过a2, 所以不如把a2的值改成a1+a2,然后依次以此类推。#include#include #define REP(i, a, b) for(int i = (a); i < (b); i++)using na... 阅读全文
posted @ 2018-04-29 12:38 Sugewud 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 这道题目可以把问题分解, 因为x坐标和y坐标的答案之间没有联系, 所以可以单独求两个坐标的答案 我一开始想的是按照左区间从小到大, 相同的时候从右区间从小到大排序, 然后WA 去uDebug找了数据, 发现这组数据过不了 3 1 1 3 3 1 1 3 3 2 2 ... 阅读全文
posted @ 2018-04-29 12:02 Sugewud 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在。 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法。这个方法可以没有一直往下求, 可以省去很多时间。紫书里面把这叫做中途相遇法,双向广搜有点这个方法的味道。这里用... 阅读全文
posted @ 2018-04-29 11:42 Sugewud 阅读(119) 评论(0) 推荐(0) 编辑