自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 实用算法 001:用多项式的逆优化dp总结

用多项式的逆优化dp总结考虑一个经典的模型:dpi=∑j=1idpi−j×fjdp_i=\sum_{j=1}^i dp_{i-j}\times f_jdpi​=∑j=1i​dpi−j​×fj​求dpndp_ndpn​ 这种问题表面看上去需要n2n^2n2,但是事实上可以更优。我们建立一个长度无穷大的多项式:F(x)=∑i=0∞fi×xiF(x)=\sum _{i=0}^\infty f_{i}\times x^iF(x)=∑i=0∞​fi​×xi,特殊的:f0=fk+n=0,k∈N∗f_{

2020-12-31 23:43:48 346

原创 [USACO19DEC]Tree Depth P

[USACO19DEC]Tree Depth P题目传送门u是v的祖先的充要条件:u是[u,v][u,v][u,v]中最小的,从小往大加元素,第i个加入的元素贡献为[0,i−1][0,i-1][0,i−1]。然后我们枚举i,和j−i=lenj-i=lenj−i=len。然后就是求这个多项式的第k/k−(∣len∣−1)k/k-(|len|-1)k/k−(∣len∣−1)项:∏t=0z∑i=0txi×∏t=z+1n∑i=0txi\prod_{t=0}^z {\sum _{i=0}^t x^i}\t

2020-12-30 18:34:37 486

原创 CF 666E 题解

CF666E 题解首先可以将所有的串用无关字符连接起来:s[1]+’#’+s[2]+’#’…s[n]然后建一个SAM。在每一个节点上搞一个动态开点线段树。然后从下往上线段树合并。最后像最长公共子串那样跑一边,倍增找到节点就可以了。/*{####################### Author ## Gary ## 2020 #######################*/#include<

2020-12-30 18:13:16 348

原创 loj 6077 「2017 山东一轮集训 Day7」逆序对

loj 6077 「2017 山东一轮集训 Day7」逆序对题目传送门一个经典问题我们一个一个加入元素,第i个贡献的逆序对数量在区间[0,i−1][0,i-1][0,i−1]内问题也就是有多少个排列xxx满足:∑ixi=k ∣ xi∈[0,i−1]\sum _{i}x_i=k\ |\ x_i\in [0,i-1]i∑​xi​=k ∣ xi​∈[0,i−1]可以考虑容斥:如果有j个不满足条件,也就是xi≥ix_i\geq ixi​≥i我们可以将不满足

2020-12-29 19:22:38 262

原创 CF 698 F

这题计算几何,非常毒瘤,思路比较简单,但是会有非常毒瘤的数据卡精度。我写了300行,还特判调整了epsepseps.代码:/*{####################### Author ## Gary ## 2020 #######################*/#include<bits/stdc++.h>#define rb(a,b,c) for(int a=b;a<=c;++

2020-12-24 10:41:34 152

原创 [USACO20FEB]Help Yourself P 题解

[USACO20FEB]Help Yourself P 题解可以维护每一个次方的结果然后用二项式定理计算答案。时间复杂度O(N×K×log⁡2(n)+N×K2)O(N\times K\times \log_2(n)+N\times K^2)O(N×K×log2​(n)+N×K2)。吐槽一下usaco的评测机,本机0.8s0.8s0.8s 但usaco上TLE,洛谷AC。/*{####################### Author ## Gary

2020-12-18 12:58:16 197

原创 JSOI2018 战争 题解

JSOI2018 战争 题解题目传送门假设A部落占领的点集为AAA,B部落的为BBB。则问题转换成,给你一个向量vvv。判断是否∃a∈A,b+v=a,(b∈B)\exists a\in A,b+v=a,(b\in B)∃a∈A,b+v=a,(b∈B)则是否存在a−b=va-b=va−b=v若我们可以处理出a−ba-ba−b的点集CCC。问题就转换成查询一个向量是否在一个凸包内。我们将所有BBB中的点乘上−1-1−1。得到B′B'B′。然后处理出向量AAA和BBB的闵科夫斯基和。关于闵科夫斯基和

2020-12-17 14:44:28 224

原创 CF 818 G Four Melodies 题解

CF 818 G Four Melodies 题解根据题目要求连边,跑最小费用流。一个优化技巧:由于spfa会退化成O(n×m)O(n\times m)O(n×m),所以需要利用dijkstra+势函数来优化。第一次最短路可以dp出来,由于是DAG。/*{####################### Author ## Gary ## 2020 #######################*/#incl

2020-12-17 10:27:46 186

原创 gym 101480 Problem C: Cow Confinement 题解

gym 101480 Problem C: Cow Confinement 题解算法知识:dp+扫描线。从下往上扫描,维护一个线段树就可以了。线段树支持区间清零,区间加和单点查询。Warning:扫描线预处理排序的部分需要注意先后顺序。/*{####################### Author ## Gary ## 2020 #######################*/#include&lt

2020-12-15 23:10:11 208

原创 Uva 1072 Huffman Codes 题解

Uva 1072 Huffman Codes 题解一个需要技巧的爆搜。/*{####################### Author ## Gary ## 2020 #######################*/#include<bits/stdc++.h>#define rb(a,b,c) for(int a=b;a<=c;++a)#define rl(a,b,c) for(i

2020-12-15 20:20:07 275 1

原创 NERC 2015 Hypercube 题解

NERC 2015 Hypercube 题解题目意思非常简单。判定一个三维图形能否拼成一个超立方体。不要问我超立方体长啥样我们回忆一下三维展开怎么做。假设一个正方体展开图像下面这样:.........e.....abcd....f...........则我们钦定正方体的底面为b,则我们在每一个位置放上一个正方体,然后滚动到b。可以发现那些地面恰好构成一个正方体$\Leftrightarrow $底面互不相同。我们可以尝试用一个三元组来表示一个滚动状态:(a,b,c),表示在前后,左右,

2020-12-15 17:02:52 167

原创 ACM ICPC 2017 WF Problem J Son of Pipe Stream 题解

ACM ICPC 2017 WF Problem J Son of Pipe Stream一个神仙网络流题。首先一个直观的想法:可以枚举水的多少,然后让flubber尽量多。然后再慢慢调整当前的策略。假设当前的候选答案为w,fw,fw,f。(表示水和flubber的数量)若,当前在保证一个数不变的情况下可以增大另一个数,则这个一定不是最优解。否则在增加一个数的同时另一个数会减小。可以发现一个数增加的数=另一个数减少的数。所以两个数的总和不变。另一个发现,两个加起来等于maxflowmaxfl

2020-12-13 22:37:45 497

原创 CF Round # 295 (Div. 1)题解

CF Round # 295 (Div. 1)题解CF 521 A. DNA Alignment假设字符串中的A,G,C,TA,G,C,TA,G,C,T个数分别为a,g,c,ta,g,c,ta,g,c,t。你构造出的个数分别为a′,b′,c′,d′a\prime,b\prime,c\prime,d\primea′,b′,c′,d′。则ρ(s,t)=a∗a′+g∗g′...ρ(s,t)=a*a\prime+g*g\prime...ρ(s,t)=a∗a′+g∗g′...,可以发现最优解一定是让max⁡{a

2020-12-13 09:26:44 168

原创 CF 1455 G. Forbidden Value 题解

CF 1455 G. Forbidden Value 题解本来想抢一个一血的,但是晚上状态不佳,没调出来就睡觉了。首先我们可以将这些操作看作一个一个的[if...end][if...end][if...end]样子的block。不妨可以在最外层套一个,if(0)…end.一个比较显然的dp状态:dp[i][j]dp[i][j]dp[i][j]表示你从i-th block里出来是j的最小花费。转移相当简单,对于set操作,只需要记录一个全局增量之后就是O(1)O(1)O(1)的了,if之类的是O(ma

2020-12-03 17:03:06 232

原创 CF 477 D Dreamoon and Binary 题解

CF 477 D Dreamoon and Binary这题比较easy。首先可以发现是dp。可以设dp状态为dp[i][j]dp[i][j]dp[i][j]。表示[i,j]。每一个状态存储两个值: 最小次数,再次基础上的操作次数我们就叫它们fir和sec吧。初始化dp[0][0]={0,0}dp[0][0]=\{0,0\}dp[0][0]={0,0}可以发现一个比较显然的转移:dp[i][j]=merge(mergek<i−1dp[k][i−1],dp[i−len][i−1]∣(si

2020-12-03 16:41:18 141

原创 gym 100958 b

gym 100958 b若我们按照第一个字符将字符串分类,可以发现所有的字符串形如:a…a…b…b…b…..z…z…由于开头是a的一定比开头是b的小,所以这两类就可以分开考虑了,而同一类就只需要比一下后len−1len-1len−1个字符,这样就转换成了几个子问题。我们可以设dp状态为dpi,j,l,rdp_{i,j,l,r}dpi,j,l,r​表示sl,sl+1...sr−1,srs_l,s_{l+1}...s_{r-1},s_rsl​,sl+1​...sr−1​,sr​的第i位都

2020-12-03 13:42:38 112

原创 arc 048 d题解

arc 048 d假设要从sss到ttt,中途在iii的位置出去走到一个特殊点,然后再回来走到t。可以发现从i出去走到的关键点一定是距离i最近的那个关键点。首先处理出所有点到最近的关键点的距离,记为disidis_idisi​。则从i走到最近的那个关键点再走回i需要花费3×disi3\times dis_i3×disi​的时间。然后再分类讨论i的位置:在sss到lca(s,t)lca(s,t)lca(s,t)的路径上。则花费的时间为:2∗depth[s]−2∗depth[i]+depth[

2020-12-03 13:39:39 191 1

原创 arc 043 c题解

arc 043 c若我们另外弄两个数组a′a'a′和b′b'b′,其中a′[i]a'[i]a′[i]表示i在aaa中的位置,b′[i]b'[i]b′[i]表示i在b中的位置。则転倒距離就是有多少对(i,j)(i,j)(i,j)满足(i<j)(i<j)(i<j)且a′[i],a′[j]a'[i],a'[j]a′[i],a′[j]和b′[i]b'[i]b′[i]和b′[j]b'[j]b′[j]的大小关系不一样。这样就可以发现有解的充要条件就是A,BA,BA,B的転倒距離是偶数。首先求転倒

2020-12-03 12:52:21 105

原创 arc 045 d 题解

arc 045 d首先,有解的充要条件是什么?若我们将横坐标一样的merge起来,纵坐标一样的merge起来。有解的必要条件是每一个联通块的大小是偶数。那么怎么证明是充分的呢?我们可以将这些点一层一层的画出来:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MCmuSMrb-1606971023118)(https://ftp.bmp.ovh/imgs/2020/12/fc2f938505930d55.png)]若一行是没有连的点个数是偶数,就直接两两消除。不然就让那

2020-12-03 12:50:37 289

空空如也

空空如也

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

TA关注的人

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