自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苟为蒟蒻又何妨

DianPiBoZhuBaoFuSheHui

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

原创 bzoj3230: 相似子串(后缀数组)

传送门后缀数组入门题。建立正反两个后缀数组算就行了。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;typedef long long ll;const int N=2e5+5;int n,m,q,sa2[N],Log[N],cnt[N];ll num[N];char s[N...

2018-11-30 21:23:25 154

原创 spoj220 Relevant Phrases of Annihilation(后缀数组+二分答案)

传送门代码:先用特殊字符把所有字符串连接在一起。然后二分答案将sasasa数组分组。讨论是否存在一个组满足组内对于每一个字符串都存在两段不相交字串满足条件。#include<bits/stdc++.h>#define ri register intusing namespace std;const int N=2e5+5;int n,m,rk[N],ht[N],sa[...

2018-11-30 18:54:48 178

原创 poj3294 Life Forms(后缀数组+双指针)

传送门后缀数组经典题目。我们先把所有的字符串都接在一起。然后求出hththt数组和sasasa数组。然后对于sasasa数组跑双指针统计答案。如果双指针包括进去的属于不同字符串的数量达到了题目给出的限制我们就更新答案并不断右移左指针。如果没有达到限制就一直右移右指针。代码:#include<iostream>#include<cstdio>#includ...

2018-11-28 17:42:09 157

原创 poj3415Common Substrings(后缀数组+单调栈)

传送门常数实在压不下来(蒟蒻开O(3)都过不了)。但有正确性233.首先肯定得把两个字符串接在一起。相当于heightheightheight数组被height<kheight<kheight<k的分成了几段,统计每段的贡献。考虑段中每个heightheightheight作为最小值出现的次数就行了。于是我们用单调栈求出每个位置向左右分别能延展到的最远...

2018-11-24 21:19:40 183

原创 poj2774Long Long Message(后缀数组)

传送门实际上可以用后缀自动机秒掉当然后缀数组也挺好写。我们将两个字符串接在一起,为了方便中间用一个特殊字符连接。然后对新字符串求heightheightheight数组。求出来之后对所有满足sai,sai−1sa_i,sa_{i-1}sai​,sai−1​属于两个不同字符串的heightheightheight取最大值就行了。代码:#include<iostream>#...

2018-11-24 14:35:05 128

原创 spoj New Distinct Substrings(后缀数组)

传送门双倍经验(弱化版本)考虑求出来heightheightheight数组之后用增量法。也就是考虑每增加一个heightheightheight对答案产生的贡献。算出来是∑∣S∣−heighti+1−sai\sum|S|-height_i+1-sa_i∑∣S∣−heighti​+1−sai​代码:#include<bits/stdc++.h>#define ri reg...

2018-11-24 14:31:55 113

原创 2018.11.24 poj3261Milk Patterns(后缀数组)

传送门后缀数组经典题。貌似可以用二分答案+后缀数组?我自己yyyyyy了一个好写一点的方法。直接先预处理出heightheightheight数组。然后对于所有连续的k−1k-1k−1个heightheightheight的最小值取最大值即可。代码:#include<iostream>#include<cstdio>#include<algorit...

2018-11-24 14:28:51 131

原创 2018.11.24 poj3693Maximum repetition substring(后缀数组)

传送门后缀数组好题。考虑枚举循环节长度lenlenlen。然后考虑枚举循环节的起点来更新答案。但是直接枚举每次O(n)O(n)O(n)。考虑枚举len∗k+1len*k+1len∗k+1作为起点。然后用len∗(k−1)+1len*(k-1)+1len∗(k−1)+1和len∗k+1len*k+1len∗k+1之间的某一段有可能使循环节长度再加一。代码:#include<i...

2018-11-24 11:54:53 176

原创 2018.11.24 poj1743Musical Theme(二分答案+后缀数组)

传送门代码:二分答案。然后对于预处理的heightheightheight数组分成几段。保证每一段中都是连续的几个heightheightheight并且这些heightheightheight都不小于二分的值。然后查询是否有一个段中两个长度的差满足条件就行了。#include<iostream>#include<cstdio>#define ri regi...

2018-11-24 11:50:43 283

原创 2018.11.24 loj#111. 后缀排序(后缀数组)

传送门后缀排序模板题。终于会后缀数组了(然而只会倍增并不会DC3DC3DC3)。在这里列举几个数组的意思:sai:sa_i:sai​:当前排名第iii的后缀的起始下标。rkirk_irki​当前下标为iii的后缀对应的排名。sa2isa2_isa2i​当前排名为iii的第二关键字对应的下标。代码:#include<bits/stdc++.h>#define ri r...

2018-11-24 11:46:12 192

原创 2018.11.18 bzoj2194: 快速傅立叶之二(fft)

传送门模板题。将bbb序列反过来然后上fftfftfft搞定。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); w...

2018-11-18 21:42:13 151

原创 2018.11.18 spoj Triple Sums(容斥原理+fft)

传送门这次fftfftfft乱搞居然没有被卡常?题目简述:给你nnn个数,每三个数ai,aj,ak(i<j<k)a_i,a_j,a_k(i<j<k)ai​,aj​,ak​(i<j<k)组成的所有和以及这些和出现的次数。读完题直接让我联想到了昨天写过的一道用fftfftfft优化点分治合并的题,这不是差不多嘛?只是这一次的...

2018-11-18 12:02:17 177

原创 2018.11.17 hdu5829Rikka with Subset(ntt)

传送门nttnttntt基础题。考虑计算每一个数在排名为kkk时被统计了多少次来更新答案。这样的话,设anskans_kansk​表示所有数的值乘上排名为kkk的子集数的总和。则ansk=∑i=knai(i−1k−1)2n−ians_k=\sum_{i=k}^na_i\binom{i-1}{k-1}2^{n-i}ansk​=∑i=kn​ai​(k−1i−1​)2n−i=>ansk=...

2018-11-17 23:22:44 205

原创 2018.11.17 bzoj4259: 残缺的字符串(fft)

传送门fftfftfft套路题。我们把aaa ~ zzz映射成111 ~ 262626,然后把∗*∗映射成000。考虑对于两个长度都为nnn的字符串A,BA,BA,B。我们定义一个差异函数dist(A,B)=∑i=1n(ai−bi)2aibidist(A,B)=\sum_{i=1}^n(a_i-b_i)^2a_ib_idist(A,B)=∑i=1n​(ai​−bi​)2ai​bi​其中a,...

2018-11-17 15:46:28 238

原创 2018.11.17 codechef PRIMEDST(点分治+fft)

传送门fftfftfft一眼题(其实最先想到的是nttnttntt,wawawa了几次之后发现模数不够大果断弃疗写fftfftfft)我们点分治统计答案的个数。考虑现在已经统计出了到当前点的所有距离如何更新答案。显然如果两个距离能够凑出一个质数的话就对答案有1的贡献。所以相当于计算出每一个距离的个数。然后可以推一个式子:tota=∑i=0maxdiscnti∗cnta−itot_a=...

2018-11-17 11:34:34 397

原创 2018.11.16 bzoj4827: [Hnoi2017]礼物(ntt)

传送门nttnttntt 入门题。考虑展开要求的式子∑i=0n−1(xi−yi−c)2\sum_{i=0}^{n-1}(x_i-y_i-c)^2∑i=0n−1​(xi​−yi​−c)2=>∑i=0n−1(xi2+yi2+c2−2c(xi−yi)−2xiyi)\sum_{i=0}^{n-1}(x_i^2+y_i^2+c^2-2c(x_i-y_i)-2x_iy_i)∑i=0n−1​(xi2...

2018-11-16 21:50:32 182

原创 2018.11.14 uoj#34. 多项式乘法(ntt)

传送门今天学习nttnttntt。其实递归方法和fftfftfft是完全相同的。只不过fftfftfft的单位根用的是复数中的东西,而nttnttntt用的是数论里面有相同性质的原根。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0; char ch=getchar()...

2018-11-16 20:38:51 258

原创 2018.11.14 uoj#34. 多项式乘法(fft)

传送门NOIpNOIpNOIp爆炸不能阻止我搞oioioi的决心信息技术课进行一点康复训练。fftfftfft板题。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar()...

2018-11-14 12:17:18 196

原创 NOIp2018退役记

NOIp2018NOIp2018NOIp2018身败名裂Day0早上学习LeoLeoLeo_jamjamjam提过的知识点:倍增+floyd(flag+1)+floyd(flag+1)+floyd(flag+1)码完已经快吃饭了。然后开了一道cfcfcf的题,有几个点一直RERERE调不过去,发现已经中午了于是去吃饭。吃完饭回来继续调试发现要用multisetmultisetmultis...

2018-11-11 17:33:54 596

原创 2018.11.09 洛谷P1110 [ZJOI2007]报表统计(multiset)

传送门sb题。直接用两个multisetmultisetmultiset维护相邻两个数的差值和所有数的前驱后继。插入一个数的时候更新一下就行了。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0,w=1; char ch=getchar(); whil...

2018-11-09 21:31:06 305

原创 2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)

传送门先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护。注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset。代码:#include<bits/stdc++.h>#define lc (p<<1)#define rc (p<<1|1)#define mid (T[p].l+T[p].r>...

2018-11-09 21:27:39 1217

原创 2018.11.09 bzoj4773: 负环(倍增+floyd)

传送门跟上一道题差不多。考虑如果环上点的个数跟最短路长度有单调性那么可以直接上倍增+floyd。然而并没有什么单调性。于是我们最开始给每个点初始化一个长度为0的自环,于是就有单调性了。代码:#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;in...

2018-11-09 21:22:46 188

原创 2018.11.09 bzoj2165: 大楼(倍增+floyd)

传送门先倍增出iii使得2i2^i2i时间时刚好有每个点能够到mmm层及以上。然后就可以用floyd+floyd+floyd+倍增求出刚好不超过mmm层的时间,最后再补一层就行了。代码:#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;inline...

2018-11-09 21:19:00 384

原创 2018.11.09 bzoj1706: relays 奶牛接力跑(倍增+floyd)

传送门倍增+floyd板子题。先列出状态fi,j,kf_{i,j,k}fi,j,k​表示经过iii条边从jjj到kkk的最短路。然后发现可以用fi−1,j,kf_{i-1,j,k}fi−1,j,k​和f1,j,kf_{1,j,k}f1,j,k​来转移出fi,j,kf_{i,j,k}fi,j,k​。由于floydfloydfloyd可以看做是矩阵乘法,因此可以用倍增/快速幂优化矩阵转移。代...

2018-11-09 21:15:36 229

原创 2018.11.08 UVA11021 Tribles(概率dp)

传送门概率dpdpdp简单题。设f[i]f[i]f[i]表示第iii天的答案。然后枚举ppp数组从fi−1f_{i-1}fi−1​转移过来就行了。显然有fi=∑j=0npj∗(fi−1)jf_i=\sum_{j=0}^np_j*(f_{i-1})^jfi​=∑j=0n​pj​∗(fi−1​)j代码:#include<bits/stdc++.h>using namespac...

2018-11-08 23:40:36 160

原创 2018.11.08 NOIP模拟 班车(倍增+dfs+bit)

传送门对于每个点离线处理出向上走2i2^i2i班车到的最上面的点。然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果就是lcalcalca直接特判)然后考虑最后把(u′,v′)(u',v')(u′,v′)连起来需要走一次还是两次。这个就是一个二维数点问题了。用dfsdfsd...

2018-11-08 23:37:05 237

原创 2018.11.08 NOIP模拟 水管(简单构造)

传送门仔细读题会发现只要所有点点权之和等于0一定有解。如何构造?直接当做树来构造就行了,非树边都赋值成0就行。代码

2018-11-08 23:23:04 138

原创 2018.11.08 NOIP模拟 景点(倍增+矩阵快速幂优化dp)

传送门显然只要所有点的权值加起来是0就一定有一组合法解。然后当成树随便构造就行了。至于非树边全部赋值为0就行。代码

2018-11-08 23:10:03 142

原创 2018.11.07 NOIP训练 L的鞋子(权值分块+莫队)

传送门乱搞题。我直接对权值分块+莫队水过了。不过调了30min30min30min发现ststst表挂了是真的不想说什么233.代码

2018-11-07 23:40:22 156

原创 2018.11.07 bzoj1965: [Ahoi2005]SHUFFLE 洗牌(快速幂+exgcd)

传送门发现自己的程序跑得好慢啊233.管他的反正AC了先手玩样例找了一波规律发现题目要求的就是a∗2m≡l(modn+1)a*2^m\equiv l \pmod {n+1}a∗2m≡l(modn+1)然后脑补了一波sbsbsb数学证明。假设当前牌aaa在第ppp个位置(为了方便假设在左半边,右半边的差不多)。然后在这一次洗牌之后会有2∗(p−1)+1=2∗p−12*(p-1)+1=2...

2018-11-07 21:46:39 156

原创 2018.11.07 bzoj2751: [HAOI2012]容易题(easy)(组合数学)

传送门组合数学一眼题。感觉一直做这种题智商会降低。利用组合数学的分步计数原理。只用关心每个数不被限制的取值的总和然后乘起来就可以了。对于大部分数都不会被限制,总和都是n(n+1)2\frac{n(n+1)}{2}2n(n+1)​.这部分数的贡献直接用快速幂算。剩下最多只有1e51e51e5个数。直接暴力算出每个数不被限制的取值的总和。代码:#include<bits/s...

2018-11-07 20:56:35 233

原创 2018.11.07 hdu1465不容易系列之一(二项式反演)

传送门其实标签只是搞笑的。没那么难。二项式反演只是杀鸡用牛刀而已。这道题也只是让你n≤20n\le20n≤20的错排数而已。还记得那个O(n)O(n)O(n)的递推式吗?没错那个方法比我今天用的要快一些。言归正传。回忆一下二项式反演的式子:fn=∑i=0n(ni)gif_n=\sum_{i=0}^n\binom{n}{i}g_ifn​=∑i=0n​(in​)gi​=>g...

2018-11-07 19:34:49 280

原创 2018.11.07 NOIP训练 lzy的游戏(01背包)

传送门考虑对于每次最后全部选完之后剩下的牌的集合都对应着一种构造方法。一个更接地气的说法:设消耗的牌数为ttt,如果使用的牌的lll值之和也为ttt,则对应着一种构造方式让这种情形成立。于是做01背包就可以了。代码...

2018-11-07 19:24:49 171

原创 2018.11.07 NOIP模拟 异或(数位dp)

传送门对于每个二进制位单独考虑贡献。然后对于两种情况分别统计。对于第二种要用类似数位dpdpdp的方法来计算贡献。代码

2018-11-07 19:20:48 329

原创 2018.11.07 NOIP模拟 分糖果(贪心)

传送门考虑 n = 2 时的情况:假定两个人分别为(a, b),(c, d),则当且仅当min(a,d) ≤ min(b,c)时,把(a, b)放在前面更优,否则把(c, d)放在前面更优然后把n = 2 的结论进行扩展。我们定义第 i 个小朋友比第 j 个小朋友小,当且仅当 min(ai,bj) <min(aj,bi),以这个规则进行排序,时间复杂度 O(nlogn)。这样得到的新队...

2018-11-07 19:18:28 369

原创 2018.11.07 NOIP模拟 数独(模拟)

传送门sbsbsb签到题。读题时间比写题时间长系列。写一个checkcheckcheck函数来检验当前时间段第(i,j)(i,j)(i,j)号格子能否放入kkk就行了。代码

2018-11-07 19:15:47 258

原创 2018.11.07 codeforces559C. Gerald and Giant Chess(dp+组合数学)

传送门令f[i]f[i]f[i]表示对于第iii个棋子,从(1,1)(1,1)(1,1)出发到它不经过其它棋子的方案数。于是我们假设(h,w)(h,w)(h,w)有一个棋子,求出它的fff值就可以了。然后考虑容斥转移fff数组。根据定义,我们求出从(1,1)(1,1)(1,1)出发到它的总方案数,再减去经过了其它棋子的方案数。然后再考虑如何才会补充不漏。发现从之前每一个fff转移过来就...

2018-11-07 08:24:38 167

原创 2018.11.06 bzoj2287: 【POJ Challenge】消失之物(背包)

传送门先假设所有物品都能用,做01背包求出方案数。然后枚举每个点,分类讨论扣掉它对答案的贡献。代码:#include<bits/stdc++.h>using namespace std;const int N=2e3+5;int n,m,w[N],f[N],g[N];inline int read(){ int ans=0; char ch=getcha...

2018-11-06 22:04:36 125

原创 2018.11.06 bzoj1835: [ZJOI2010]base 基站选址(线段树优化dp)

传送门二分出每个点不需要付www贡献的范围,然后可以推出转移式子:f[i][j]=f[i−1][k]+value(k+1,j)+c[i]f[i][j]=f[i-1][k]+value(k+1,j)+c[i]f[i][j]=f[i−1][k]+value(k+1,j)+c[i],把c[i]c[i]c[i]提出来发现前面的可以用线段树优化转移。于是每次选一个数相当于区间加,再维护一个区间查询最小...

2018-11-06 21:59:50 162

原创 2018.11.06 NOIP训练 简单的计数问题(计数dp)

传送门直接f[i][j]f[i][j]f[i][j]表示已经到第iii个位置已经找到jjj个的方案数。简单转移一下就行了。代码

2018-11-06 21:56:34 230

segment--tree

一个线段树的ppt,里面主要讲了线段树,主席树,和树链剖分

2018-08-20

空空如也

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

TA关注的人

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