自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 紫书 例题8-14 UVa 1607 (二分)

题意非常难理解……#include<cstdio>#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 212345;struct node{ int a, b, w;}g[MAXN];int n, m;int output(int k)...

2018-04-30 20:10:33 186

原创 紫书 例题8-13 UVa 11093 (反证法)

这道题发现一个性质就解决了如果以i为起点, 然后一直加油耗油, 到p这个地方要去p+1的时候没油了, 那么i, i+1, ……一直到p, 如果以这些点为起点, 肯定也走不完。为什么呢?用反证法, 假设以q(i  < q <= p)这个点为起点可以走完的话, 那么i这个点也一定可以走完首先, i是可以达到q的, 因为i可以达到p, 而q是在p前面的, 而且从i开始走到q这个点剩下的油量肯...

2018-04-30 17:56:15 73

原创 紫书 例题8-12 UVa 12627 (找规律 + 递归)

紫书上有很明显的笔误, 公式写错了。g(k, i)的那个公式应该加上c(k-1)而不是c(k)。如果加上c(k-1)那就是这一次所有的红气球的数目, 肯定大于最下面i行的红气球数我用的是f的公式, 我觉得这个稍微比f好理解一点。f(k, i) 表示k小时之后最上面i行红气球的个数。分两种情况如图所示左上角的正方形的上面i行的红气球个数和前一个小时(也就是k-1)的整个正方形的上面i行的红气球个数是...

2018-04-30 16:55:20 122

原创 紫书 例题8-11 UVa 10954 (优先队列)

解法和合并果子是一样的, 每次取最小的两个, 更新答案, 加入队列#include<cstdio>#include<queue>#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;int main(){ int n, x; while(~scanf("%d", &...

2018-04-30 16:10:59 115

原创 紫书 例题8-10 UVa 714 (二分答案)

这道题让最大值最小, 显然是二分答案当题目求的是最大值最小, 最小值最大, 这个时候就要想到二分答案为什么可以二分答案呢, 因为这个时候解是单调性的, 如果简单粗暴一点就全部枚举一遍, 验证答案。但是因为答案满足单调性, 可以用二分的方法来”枚举“, 复杂度可以从n降到logn开始我自己写了一个, 但是WA, 后来看了刘汝佳的代码, 发现要注意三点(1)这道题的和的最大值会爆int, 要用long...

2018-04-30 15:46:10 132 1

原创 紫书 例题8-9 UVa 1451 (数形结合)

这道题用了数形结合, 真的牛逼, 完全想到不到还可以这么做因为题目求的是平均值, 是总数除以个数, 这个时候就可以联系到斜率, 也就是说转化为给你一堆点, 让你求两点之间的最大斜率要做两个处理(1)去掉上凸点, 因为上凸点是无论如何都不会为最优解的(2)去掉之后每两个点之间的斜率是单调递增的, 这个时候要求切点。切点即最大斜率, 所以就枚举终点, 然后找该终点对应的最大斜率(也就是找到切点), 然...

2018-04-30 12:19:48 129

原创 紫书 例题8-8 UVa 1471 (用set实现动态二分)

设切割的区间为(j, i), 注意两边都是开区间。然后可以预处理出以i为起点的最长连续递增的长度和以j为终点的最长连续递增的长度。大致思路就是枚举i,右边这一侧的最优值就知道了, 然后这道题的关键就是就是j取哪里。(1)去掉干扰元素, 这一步非常的关键, 设题目给的数组为a, g(i)表示以i为结尾的最长递增序列长度在j < i中, 如果 a[j'] <= a[j] 同时 g(j') ...

2018-04-29 20:02:44 174 1

原创 紫书 例题8-7 UVa 11572(滑动窗口)

滑动窗口这个方法名字非常形象, 先是窗口的右指针尽量往右滑, 滑不动了就滑窗口的左指针, 滑到右指针又可以开始滑动为止。这道题是要记录滑的过程中最大的窗口长度, 限制条件是窗口中不能出现重复的值。重复的值有两种判断方法。一种是set, 其实就是开个vis数组, 但是数据有10的六次方, 数组肯定开不下, 所以用set来代替, 用时间换空间, set的查询是logn, 比数组要慢。第二种是用map计...

2018-04-29 16:06:18 73

原创 紫书 例题8-6 UVa 1606(扫描法)

这道题目用扫描法扫描法:在枚举的过程中维护一些重要的量, 从而简化计算这道题用到了极角, 叉积, 高一的我表示一脸懵逼不过自己去百度了一下好像大概看得懂。这道题我还有一些疑问, 先这样吧#include<cstdio>#include<cmath> #include<algorithm>#define REP(i, a, b) for(int i = (a...

2018-04-29 15:38:28 275

原创 紫书 例题8-5 UVa11054(等价转换)

这道题用到了等价转换的思想所有要运到a1的酒, 都要经过a2, 所以不如把a2的值改成a1+a2,然后依次以此类推。#include<cstdio>#include<cmath> #define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;int main(){ int n...

2018-04-29 12:38:06 111

原创 紫书 例题8-4 UVa 11134(问题分解 + 贪心)

 这道题目可以把问题分解, 因为x坐标和y坐标的答案之间没有联系, 所以可以单独求两个坐标的答案 我一开始想的是按照左区间从小到大, 相同的时候从右区间从小到大排序, 然后WA 去uDebug找了数据, 发现这组数据过不了 3 1 1 3 3 1 1 3 3 2 2 2 2  正确输出是 1 1 3 3 1 1 2 2  我输出 IMPOSSIBLE 我发现当有包含关系的时候, 会先处理大区间而把...

2018-04-29 12:02:21 97

原创 紫书 例题8-3 UVa 1152(中途相遇法)

这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在。 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法。这个方法可以没有一直往下求, 可以省去很多时间。紫书里面把这叫做中途相遇法,双向广搜有点这个方法的味道。这里用到了二分查找, 总的时间复杂度是n的二次方乘logn#include<cstdio>#include<vecto...

2018-04-29 11:41:33 121

原创 紫书 例题8-2 UVa 11605(构造法)

这道题方法非常的巧妙, 两层的n*n, 第一层第I行全是第I个国家, 第二层的第j列全是第j个国家。这样能符合题目的条件。比如说第1个国家, 在第一层的第一行全是A, 然后在第二层的第一行就有ABCDE……这样A就和所有的国家都连接了,其他国家也是一样的。只能说这种方法非常巧妙吧,答案讲出来很简单,但是不容易想到。#include<cstdio>#define REP(i, a, b...

2018-04-29 11:35:40 129

原创 紫书 例题8-1 UVa 120(构造法)

#include<cstdio>#include<iostream>#include<sstream>#include<algorithm>#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 50;int ...

2018-04-27 18:43:11 132

原创 刘汝佳代码仓库网址

点击打开链接

2018-04-27 18:26:27 3531

原创 快排模板(附求第k大的数)

#include<cstdio>#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 112;int a[MAXN], n;void sort(int l, int r){ if(l >= r) return; int i = l,...

2018-04-23 19:02:36 219

原创 归并排序模板(附求逆序对)

逆序对满足两个条件, i < j 和 ai > aj归并可以求逆序对, 因为是按顺序加入, 所以右区间加入的时候, 左区间的数满足 i < j, 然后左边还没有加入的数肯定比当前的a[q]要大, 应该是按大小加入的, 所以满足ai >aj, 所以这个时候计数器可以加上左区间还没加入数的个数, 即m-p, 注意是左闭右开区间, 所以m-p不用加一。 #inclu...

2018-04-23 18:57:22 183

原创 紫书 习题7-13 UVa 817(dfs+栈求表达式的值)

题目链接  点击打开链接这道题分为两个部分, 一用搜索枚举每种可能, 二计算表达式的值, 有挺多细节需要注意特别注意我的代码中在计算表达式的值中用到了一个!(代码枚举中的!表示不加符号, 我现在说的是表达式中的!), 这个是虚拟的, 是为了数字栈里面只有一个数字的时候不会被计算,因为计算至少要两个数个时候。 这个时候f函数返回0是不会执行50行的while的。比如2100-100,这当执行到‘-’...

2018-04-21 16:17:57 215

原创 紫书 习题7-8 UVa 12107 (IDA*)

参考了这哥们的博客 https://blog.csdn.net/hyqsblog/article/details/46980287 (1)atoi可以char数组转int, 头文件 cstdlib (2)小技巧,倒过来存是用[len-i-1]  (3)这道题的关键在于怎么去构造这个搜索,以什么方式去搜索。这里搜索专门用两个参数来控制第几个数的第几个位置, 还有一个参数是改变的次数, 也就是深度。这...

2018-04-20 23:33:43 189

原创 紫书 习题7-14 UVa 307(暴搜+剪枝)

这道题一开始我想的是在排序之后只在头和尾往中间靠近来找木块, 然后就WA, 事实证明这种方法是错误的。然后参考了别人的博客。发现别人是直接暴搜, 但是加了很多剪枝, 所以不会超时。我也想过这个做法,但是因为觉得肯定超时所以没有写, 我显然没有想到可以这么剪枝#include<cstdio>#include<cstring>#include<functional&g...

2018-04-20 21:03:43 136 1

原创 紫书 例题7-14 UVa 1602(搜索+STL+打表)

这道题想了很久不知道怎么设置状态,怎么拓展,怎么判重, 最后看了这哥们的博客 终于明白了。https://blog.csdn.net/u014800748/article/details/47400557 这道题的难点在于怎么设置联通的状态,以及怎么拓展判重 . (1)状态:这里状态先定义了一个格子cell, 有x和y坐标。然后set<cell>表示一个联通块, 再用set<se...

2018-04-07 11:38:58 141

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除