自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 资源 (1)
  • 收藏
  • 关注

原创 我所掉入的坑(持续更新中)

1.所有数据都要初始化!!!   PS:struct 默认的初始值不一定是0!2.链式前向星数组范围:无向图*23.lowbit(x): 取x最后一个是1的一位和它后面所有的04.所有的初始化数据都要留有余量(+5)  e.g.逆元的那个数组inv[]。。。5.两个int相乘可能会爆long long 所以要*1lle.g. int a=1ll*x*y%mod6.取...

2018-11-03 18:09:15 219

原创 博弈论-SG函数

1.有向图游戏把每一个局面当做一个点,然后一个局面能一步走到另一个局面就连一条有向边,保证是一个DAG。从后往前递推,没有出度的结点要么是必败态,要么是必胜态。于是能走到必败态的结点一定是必胜态,只能走到必胜态的结点是必败态。因为是DAG,所以每个结点要么是必败态,要么是必胜态。over2.有向图游戏的和与1的区别是多个DAG。对于必败态的局面,这个点SG值赋值为0,每个点的SG值是最...

2019-11-12 22:30:54 324 1

原创 开车旅行

大概的思路就是用链表预处理一下,然后用倍增。链表是因为:我们每次增减的都是周围的几个数。倍增是因为:每一次之后的数都是固定的,就是惟一的数指向惟一的数。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1000005;int n,a,b,l,r,j,i;...

2019-10-26 22:56:00 169

原创 校内模拟-变形lcs

emmmm a,b2个字符串,a串<=1e6,b串<=1e3,求他们的lcs。那时间复杂度显然是有一些问题的。。。但是我们会发现lcs一定是<=1e3的,所以用f[i][j]表示b的前i个里面lcs长度是j。f[i][j]就可以用我们刚才的类似的方式转移了emmm。想法就是考虑第i个字母是否可以作为最长公共子序列的一员。最后输出就是找到i最大的合法的f[m][i],输...

2019-10-26 12:00:29 201

原创 poj1722:substract

这个题其实可以转化成在一些数字之间插上加号或者减号,然后等式的计算结果是t,求方案的一个题。其中第一个数和第二个数的符号是固定的:+,-f[i][j]表示前i个数的运算结果是j时,第i个数前面的符号。所以如果存在f[i][j-a[i]],则可以转移到f[i][j]=1上。同理如果存在f[i][j+a[i]],则可以转移到f[i][j]=0上。这样我们就构造好了这个数组。然后开始找出对于要求...

2019-10-25 21:43:54 389

原创 TRIP-LCS方案输出

首先肯定是要求lcs的,这个我懒得讲了。。。因为lcs最多就是这个串的长度,所以我们可以考虑dfs。我们开2个数组,f1[i][j]表示在a串中,f2[i][j]表示在b串中,j之前的第一个‘a’+j在什么地方。因为我们递归的时候知道了lcs的长度,所以我们可以用枚举每一位是啥的方式递归。(26^80emmmm但是可以剪枝)因为知道了每一位是啥,所以我们就可以轻易求出上一个的位置。如果...

2019-10-24 21:40:00 295

原创 环状最大两段子段和

https://www.luogu.org/problem/P1121这个题非常有意思。有2种情况,一种是不用首尾相连的方法,另一种是要首尾相连的。首先考虑第一种,应该还是挺好写的吧。。。就是直接算一下。用f[i]表示以第一个数开头到i的最大子段和,g[i]就是表示以最后一个数结尾的到i的最大子段和。然后另外一种情况的话,我们就可以在整个子段中去掉最小的两个子段,然剩下的三段就是最大的了。...

2019-10-24 21:16:11 253

原创 mobile service:滚动数组的使用

……并不是什么非常难的题目。1.f[i][x][y][z]表示在第i轮,三个人分别在x,y,z的最小代价。2.然而我们经过思考发现这样设计状态不是很好。在第i轮,一定有一个售货员在s[i]的位置,而且我们并不需要知道这三个人分别在哪个位置(就是ABC只要不在同一位置,所有状态都是一样的)。所以,我们可以缩减一维,f[i][x][y]表示第i轮,有2个人分别在x,y,另外一个人在s[i]。而...

2019-10-22 23:17:12 124

原创 花店橱窗布置

题目链接:https://www.luogu.org/problem/P1854因为花瓶和花束的相对顺序都是固定的,所以用f[i][j]表示前i个花瓶里面放前j束花最大利益。对于第j朵花来说,他可以放到位置从i-j都是ok的。所以我们可以枚举这个花的位置j+k,用f[j+k-1][j-1]+a[j][j+k]来更新答案。(感觉上并不是很难嗯哼)但这个题还要输出方案。对于最终结果f[...

2019-10-21 19:17:24 206

原创 codeforces-235B-play osu (期望dp)

首先我们不可能把所有的可能情况一个个列举然后计算期望,很不现实。我们可以尝试从头到尾枚举,计算1-n位置期望的贡献。因为贡献是连续的一段的平方,很不好处理,我们尽量变成线性的结构。我们发现,n*n=1+3+5+...+(2*n+1)。所以对于连续的一段,第一次出现的数的贡献是1,第二次出现的是3,第n次出现的是2*n+1,而这正是处理这带有平方的问题的一个小技巧。对于前n个来说,他贡献的期望=...

2019-10-09 22:57:09 160

原创 Zap与YY的GCD(莫比乌斯反演)

Bzoj1101: Zap题目大意:求多少对x,y使得gcd(x,y)=d,x<=m,y<=n。首先将范围都除以d,这样相当于求gcd(x,y)==1的个数。莫比乌斯函数一个很重要的性质:对于sigma d|n phi(d) 来说,只有n==1时答案是1,否则都是0。那么我们这个式子可以转化成sigma d|gcd(i,j) phi(d) ,因为一旦gcd(i,j)...

2019-10-06 17:31:25 180

原创 扩展欧几里得算法与其应用

扩展欧几里得的证明及其算法定理:对于任意一对整数a,b,一定存在x,y使得ax+by=gcd(a,b)证明:假设a>b。1.若b=0,一定存在x=1,y=0,使得ax+by=gcd(a,b)2.若b>0,假设存在bx+(a%b)y=gcd(b,a%b),那么也存在bx+(a%b)y=gcd(a,b)又因为bx+(a-b*(a/b))y=gcd(a,b)=ax+by,...

2019-10-05 15:54:41 156

原创 欧拉函数

定义:1-n中与n互质的数的个数被称为欧拉函数。求法:n*(1-1/pi),其中pi是n的所有质因数性质1-6 见书P139 (这是一个积性函数)积性函数定义:当a,b互质的时候,f(a*b)=f(a)*f(b)例题:POJ 3090这个题本质求得就是i=2-n中与i互质的数的个数的和,然后再进行一些操作。写法1#include <iostream>#i...

2019-10-04 23:22:33 177

原创 单调栈与单调队列:最大子序和+city game+largest rectangle in a histogram

city largest rectangle in a histogram从1-n遍历,取出每次以i为右边界(完全取到)最大的面积。显然,i最多可以延伸到的地方是比他高或者等的第一个长条,算出每次面积的最大,再一起取max单调栈即可。#include <bits/stdc++.h>using namespace std;typedef long long ll;...

2019-10-04 15:03:16 139

原创 表达式求值(TYVJ1043)

我他喵的被这题气死好吧。(2年前的我调了3个小时,2年后调了1.5个小时)求一个中缀表达式的值(小学生都会好吧)首先:计算机最喜欢的一定是后缀表达式,我们只要从头到尾遍历,然后碰到数字就压入栈,碰到运算符就直接取出栈顶的2个元素直接进行计算,并将结果压入栈。那我们这里要做的操作就是将中缀转成后缀。怎么做呢?1.碰到数字将他输出2.碰到左括号将他入栈。3.碰到运算符只要栈...

2019-10-04 14:44:43 177

原创 running median POJ3784

巧妙运用了2个队列来维护中位数。一个是大根堆,(前1-n/2个数)一个是小根堆(后一半的数)插入每个数时比较大小,再决定插入哪个堆栈里。若是某个堆里的元素个数超过了应有的限制,那么就将其堆顶的元素插到另一个堆里即可。#include <bits/stdc++.h>using namespace std;const int maxn=10005;int p,n,a[maxn...

2019-10-04 14:33:48 120

原创 Editor: 维护一个整数编辑器 HDOJ4699

我们可以继续沿用running median中2个队列的好想法: 我们沿用2个堆栈。光标前面的所有数都在栈A中,光标后的都在栈B中。栈A和栈B的栈顶分别是光标2边的2个数。因为问的位置保证在光标前,我们只要对于A数组维护一下前缀和。而光标的左右移动,我们就只要改变A,B栈顶的元素即可,插入也是同理。#include <bits/stdc++.h>using namespa...

2019-10-04 14:27:35 154

原创 实现一个可以支持入栈,出站并输出栈顶和查询站内最小的值三个操作的栈

首先前2个操作,普通的栈都是ok的。对于后一个操作,我们可以考虑2种做法:1.在建立这个栈的同时我们维护一个二叉堆。每次操作是O(logn)的2.再搞一个栈专门维护每个时刻的最小值。每次操作是O(1)的代码写了第二种。#include <bits/stdc++.h>using namespace std;/*用优先队列:查找是O(logn)的再开一个栈:...

2019-10-04 14:15:51 254

原创 hihocoder 分割相同整数

首先我们发现对于不合法的情况:cnt(最大的相同的个数)*2-1>n由于是字典序最小,我们肯定优先保证前面的越小越好,直接贪心我们选择合法的时候最小的数字,置于当前位置。注意:这里的合法不仅仅是考虑当前数字是否和前一个有重复,还要时刻满足cnt*2-1<=i。因为后面的没有排的也相当于一个序列,我们也要考虑他的合法性。#include <bits/stdc++....

2019-10-02 12:07:42 104

原创 radar installation POJ1328

因为所有雷达的半径都一样,我们可以轻易求出对于每一个建筑物可以被覆盖到的雷达范围。于是就把题目转化成了给定一系列区间,要就每个区间里至少要有一个雷达,问至少要多少雷达。这样的话直接从头到尾贪心就行了。pos表示最后一个雷达的位置。对于每一个区间,如果区间的左端在pos的后面,那么一定要新建一个雷达,并将他的位置制成此区间的右端点。若是区间的左端在pos的前面,那么新建一个雷达的位置在min(p...

2019-10-02 12:01:28 154

原创 Stall Reservation POJ3190

很好想的贪心策略:能用之前的就用之前的,不然就不用。具体的实现可以用优先队列呀,emmm可以重载操作符会好写一些。#include <bits/stdc++.h>using namespace std;const int maxn=1005;int n,s[maxn];struct node{ int x,y,id;}a[maxn];struct cow{...

2019-10-02 11:53:51 122

原创 进出栈序列的问题(卡特兰数)

emmm有很多变种?1.C(2N,N)/(N-1)2.递推:枚举k,就是假设第一个元素在第k个出栈。于是可以划分成k-1个数出栈和n-k个数出栈,2边的方案数字乘起来就行。3.动规:f[i][j]表示i个数尚未进栈,j个在栈里,n-i-j已经出栈。f[0][0]=1,目标:f[n][0]f[i][j]=f[i][j+1]+f[i][j-1]...

2019-10-02 11:47:40 345

原创 poj2054-color a tree(贪心)

一个错误结论:尽量让权值最大的先被选走。而我们可以很容易的构造出一个反例(不赘述了)但由这个错误的结论,我们可以得到一个正确的结论:对于当前权值最大的点,一定在他父亲被染过色后第一个被染色,相当于是紧接着父亲被染色。根据这个原则,我们可以把相邻染色的2个点都通过并查集合并成一个大的结点,得出他们的相对位置(拓扑序)然后再继续找下一个结点,这样每次合并都会少一个结点,最终只有一个结点的时...

2019-10-01 11:10:13 182

原创 Sunscreen(poj3624)与Task(HDOJ4864)的比较-贪心

Sunscreen要找最多的奶牛,所以从奶牛的角度考虑问题。将奶牛的min从大到小排序,对于每个奶牛,要找满足他条件的里面的防晒霜之中spf最大的。因为后面的奶牛的min一定小于等于这个奶牛,下线不成问题,而只关乎上线,我们要把上线小的尽量留到后面。#include <bits/stdc++.h>using namespace std;const int maxn=30...

2019-09-30 21:26:05 249

原创 BZOJ1045 糖果传递(均分纸牌问题变种)

先考虑线性的情况:我们考虑整体和隔离的思想。将前i个看做一个整体,显然前i个内部的均分是不会改变其整体结构的,因而对于该体系来说,想要达到平均数结构,就必须与下一个体系交换足够的纸牌,而交换数量就是 |G[i]−i⋅ave| ,其中 G[i] 是前缀和。然后就可以推出一个结论: d=∑Mi=1|i⋅ave−G[i]|,也就是将每次体系更新的贡献加起来。然后我们把每个数都减去ave,这样平均...

2019-09-30 16:17:50 175

原创 中位数模型

货仓选址有一个结论:一条线上的n个点,要选取某一个点,使得所有点到这个点的距离之和最小,那么这个点一定在中间。如果n%2==0,就是中间2个之间的任意点都可以。如果n%2==1,就是正中间那个点。具体的证明我就不再赘述。。。(大概想想就好了嗯)所以这个题就直接用这个结论啊。。。然后看一个变种:Soldiers POJ1723首先这玩意是二维的,我们可以一维一维考虑。...

2019-09-29 23:13:36 479

原创 poj3179 : corral the cows-离散化的巧妙运用

看看就想到了二分答案,然后用前缀和验证一下。再一看数据:他喵的居然是10000,n*nlogn绝对爆炸。经过一会儿的思索,我们发现草只分布在最多500个格子里。那一定有很多很多行和列是没有草的,而我们需要做的就是去掉这些行列,这就是离散化。(感觉很nb的样子)这样的话,我们一开始就要存下每个有草的位置,然后排个序,找到每个草的相对位置,建立一个二维矩阵,并对这个矩阵求矩阵前缀和...

2019-09-29 21:22:15 305

原创 汉诺塔问题

由三个变成了四个啊。一样的做法。考虑先将前i个用四塔的方法置于B,然后用三个的方法搞走n-i个,最后再用4塔的方法搞走i.所以就是min(2*f[4][n]+f[3][n-i]))其中i取1-n那么我们可以推广一下。如果是m个塔,我们可以用前i个用m塔的方法置于B,然后用m-1塔的方法搞走n-i,还是一样算。...

2019-09-28 19:51:49 158 1

原创 关于差分约束的一些总结

1. 对于差分约束起点以及一些隐含条件的设置。举个例子:起点那个点其实是默认0的。糖果一题里面每个小朋友都至少拿到一个,那么起点向每条边都连上1而poj1275和序列2个题里面,由于有一个前缀和的思想,1.那么每个数都一定>=0,2.前一个数小于等于后一个数3.后一个数至多比前一个数大1。这是前缀和的特质所决定的。那么这个时候起点只需要连向第一个点搞一个边权为0的边就好了,而并不...

2019-09-28 18:18:42 143

原创 hdu:color a tree-树形dp

我们可以二分答案。(至少染色几个点)然后对于限制B,我们可以转化成子树x内之多有num(总染色数)-x(子树外的染色数)然后通过树形dp从下到上算每个根节点的子树内的上界和下界,判断上是否不小于下界。PS:还有注意一下在算上届的时候应该是所有子树的up和+1(因为还有根节点自己)->被坑了我好难受。这样也可以保证对于没有上届限制的点,他的上届就是siz同时还要注意判断是否...

2019-09-28 11:59:03 175

原创 poj1275 cashier-employment

因为题目问的是至少要招几个人,那我们就从小到大枚举要招几个人,看是否合法。输入need表示这一小时至少需要工作的人数,然后用h存一下这一小时最多可以开始工作的人数(就是输入时可以达到的合法的工作人数)。所以每个小时开始工作的人数一定在0到h之间。所以可以考虑用每个小时开始工作的人作为差分变量。但是还有一个限制:一个人只工作8个小时,所以对于某个点,从他开始前8个点开始工作的人数的和必须&g...

2019-09-28 11:52:54 130

原创 序列-差分约束版本

题目链接:https://www.luogu.org/problem/P1645“差分约束一定要转化成a-b>=c的形式!” ->用b连向a题目里有一系列“至少”的要求,有些想到了差分约束。(当然贪心也是很好的)设s[i]表示前i个数里面选了几个作为序列的一员,那么对于每个条件l,r,c就可以想到s[r]-s[l-1]>=c,并以此来建立边权。那是不是这样就结束了...

2019-09-28 11:32:34 385

原创 糖果[scoi]

题目链接:https://www.luogu.org/problem/P3275有一堆限值条件然后还要求最值,就有些想到了差分约束。大于可以转化成大于等于+1对于约束a>=b,我们可以连一条边由b到a,这就意味着b至少比a要大1。由于每个小朋友都需要一个糖果,我们就拟一个原始起点,让他连到所有的点的边都是1,这样就可以保证每个小朋友都有糖吃。对于各种约束建成的图,从原点到...

2019-09-26 22:39:21 192

原创 兔子与兔子与回文串-字符串哈希

哈希就是把一个具有某些性质的东西转化成另一个便于查询的东西。其应用有许多,主要是字符串。下面是2个哈希的字符串题。兔子与兔子:https://ac.nowcoder.com/acm/contest/1008/B一道裸题,不想解释w,就是了解一些hash在字符串中的应用回文串:https://ac.nowcoder.com/acm/contest/1008/C这边有一些小小的变化...

2019-09-21 14:44:26 317 1

原创 小ah和小uim的大逃离

题目链接:https://www.luogu.org/problem/P1373求方案数,然后数据范围800,感觉上就可以dp因为是每个点都可以作为结束点,所以需要2维表示到了这个点2个人的差是k的方案数。为了便于转移,要加一位0/1表示现在是小uim还是小a可以加水。初始状态就是f[i][j][a[i][j]][0]=1(不难理解吧?)这样的话就不要一个一个枚举起点了。#i...

2019-09-17 22:30:24 839

原创 树上差分:松鼠的新家+最大流usaco+运输计划

2中树上差分:边拆分和点差分边差分:对于x,y之间所有的路径都加上c,相当于把这条路径拆成2条路径:一条从x到lca,另一条从lca到y,注意因为是边的差分,所以这2条路径是没有重叠的。即c[x]++,c[y]++,c[lca(x,y)]-=2;点差分:也是拆分成2条路径,一条是从x到lca,另一条是从y到lca的儿子(同时也是y的祖先),这样就可以保证2条路径没有重叠。即c[x]...

2019-09-13 14:42:58 221

原创 状压dp_宝藏

题目链接:https://www.luogu.org/problem/P3959很显然开通的一定是树。所以可以变相的认为赞助商搞的起点是树的根,每个结点到树的根的距离就是这个点的层数。有点像树形dp的状压dp吧。枚举根节点,然后枚举每一层的结点的集合,算出这一集合的最小代价,存到f[floor][s]中,表示已经选了的(注意啊不是这一层选了的)结点的集合为s,选到了floor层的最小代...

2019-08-29 18:02:10 180 1

原创 愤怒的小鸟-状压dp

题目链接: https://www.luogu.org/problem/P2831搜索待写对于状压dp,f[s]表示只要一维表示杀死的猪猪的集合为s的情况下需要的最小代价。对于每一个猪猪,他所被杀死的那个抛物线即可以是只杀死了他自己(比如所有猪猪的横坐标都相同那就只能都用了杀死一头猪的抛物线完成任务),也可以是同时杀死了2个猪猪,而在这同时可能还会杀死别的猪猪,所以我们用一个集合存一下杀死...

2019-08-28 15:59:04 162

原创 状压dp总结-吃奶酪+玉米田+宝藏

吃奶酪这题因为是个普及-的题目,所以我们可以直接用dfs搞一下。不过这题还可以用状压dp(二进制枚举),其实和dfs的本质是一样的啦f[x][s]表示以x为起点,现在的状态是s的最短路径。转移方程:f[i][s]=min(f[i][s],double(f[j][s-(1<<(i-1))]+dis(x[i],y[i],x[j],y[j])));注意这里的二进制...

2019-08-28 15:36:55 226

原创 lca的题

1.lca模板 洛谷P3379 https://www.luogu.org/problem/P33792.How far away HDU:2586 http://acm.hdu.edu.cn/showproblem.php?pid=2586 1)RMQ 2)LCA dep改成权值3.仓鼠找sugar lc...

2019-08-16 20:02:26 116

Axure快速原型设计(第二版)

包括基础篇和实战篇,支持新用户Axure快速原型设计

2013-04-15

空空如也

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

TA关注的人

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