bzoj 3439
摘要:先把所有词扔进tire,然后dfs序弄出区间,然后就是区间最大值了 主席树各种写挂QAQ 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=
阅读全文
posted @
2016-02-25 18:36
onlyRP
阅读(142)
推荐(0)
bzoj 2330
摘要:开学了,不能愉快地刷题了QAQ 差分约束(以前用并查集做真是作死。。)然后有个点比较坑,要过的话就要倒着加边,否则TLE 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r)
阅读全文
posted @
2016-02-21 17:22
onlyRP
阅读(191)
推荐(0)
bzoj 1030
摘要:单词建出AC自动机,然后在自动机上做DP d[i][j]表示第i个字符匹配到节点j上的方案数 直接算有点麻烦,统计不满足的方案数就好了 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec
阅读全文
posted @
2016-02-17 00:05
onlyRP
阅读(157)
推荐(0)
hdu 2222
摘要:AC自动机入门题,只是上来传个模板。。。 1 //#include<bits/stdc++.h> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<iostream> 6 #include<queue> 7
阅读全文
posted @
2016-02-16 15:22
onlyRP
阅读(172)
推荐(0)
bzoj 4260
摘要:设a[i]为前缀和,则i~j的异或和为a[j]^a[i],对于2个只需把另一个当成后缀就可以了 求max(a[j]^a[i])的话就用tire维护就可以了 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #
阅读全文
posted @
2016-02-15 00:02
onlyRP
阅读(257)
推荐(0)
bzoj 1212
摘要:tire入门,死得好惨。。。 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=r;i--) 4 #define link(x) for(e
阅读全文
posted @
2016-02-14 20:48
onlyRP
阅读(244)
推荐(0)
bzoj 1935
摘要:很明显直接二维是作死的。。所以给按X点排下序,当然离线处理询问时差分的点会方便些。。 对Y坐标就用BIT维护就行。。 但由于坐标比较大,所以还要离散化= = 处理起来略麻烦但代码并不难写 1 //#include<bits/stdc++.h> 2 #include<cstdio> 3 #includ
阅读全文
posted @
2016-02-13 22:57
onlyRP
阅读(284)
推荐(0)
bzoj 2743
摘要:和上道差不多,离线处理,然后扫一遍序列,扫到就数先不增加,上个相同的数+1,上上个数-1,用BIT维护前缀和 静态差错要多练练。。。 1 //#include<bits/stdc++.h> 2 #include<cstdio> 3 #include<cstring> 4 #include<algor
阅读全文
posted @
2016-02-13 16:10
onlyRP
阅读(192)
推荐(0)
bzoj 1264
摘要:用DP直接求LCS明显超时,这题和平时的区别在与给定了数,所以从这入手可以直接记录各数字的位置 然后依次填入dp[i]=max{dp[j]}+1(1<=j<=i)用BIT维护最大值O(nlogn) 1 //#include<bits/stdc++.h> 2 #include<cstdio> 3 #i
阅读全文
posted @
2016-02-13 00:51
onlyRP
阅读(190)
推荐(0)
bzoj 1878
摘要:这题的做法有点神奇。。 离线处理。按r排序,记录上个相同的数出现的位置,边加入一个数的同时删去上一个相同的数就好了。。用BIY维护和 BIT写起来挺快的。。 1 //#include<bits/stdc++.h> 2 #include<cstdio> 3 #include<cstring> 4 #i
阅读全文
posted @
2016-02-12 21:23
onlyRP
阅读(159)
推荐(0)
bzoj 1452
摘要:二维BIT。。。 感觉不会树状数组还是不太好。。而且这题用线段树肯定MLE。。 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=r;i--
阅读全文
posted @
2016-02-12 12:34
onlyRP
阅读(227)
推荐(0)
bzoj 4199
摘要:没有题面差评 先来遍SA求出h,再给h排序,从大到小计算,并查集维护连续的区间(表达能力太弱。。还是看代码好说话) 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) fo
阅读全文
posted @
2016-02-11 23:01
onlyRP
阅读(148)
推荐(0)
bzoj 3238
摘要:明显要用求SA再求h,而lcp(i,j)就等于i到j之间最小的h 用f[i]表示i跟比i大的后缀的lcp的和,然后用单调栈维护最小值就好了(有点像DP?) 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #
阅读全文
posted @
2016-02-11 16:11
onlyRP
阅读(177)
推荐(0)
bzoj 1031
摘要:复制一下原串处理环,然后直接出SA就可以了 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=r;i--) 4 #define link(x
阅读全文
posted @
2016-02-10 19:52
onlyRP
阅读(181)
推荐(0)
codevs 3160
摘要:SA入门题,将2个串中间用另外的字符链接即可 调了半天一直以为是模板的错,原来是乘法超了intQAQ 不好意思。。传错代码,误认子弟(啪啪啪 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define
阅读全文
posted @
2016-02-10 18:17
onlyRP
阅读(278)
推荐(0)
bzoj 1072
摘要:状压DP,f[i][j]表示在i状态下余数为j的情况 然后就是i的表示。。先认为数字互不相同(坑爹的想法= =),然后就有没有用到压缩状态 然后还要去重。。对每个数字来说除以数字个数的阶乘即可 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(in
阅读全文
posted @
2016-02-06 00:56
onlyRP
阅读(209)
推荐(0)
bzoj 1076
摘要:最近好懒散QAQ 就是状压DP+概率。。由于顺着推还要计方案数略麻烦,所以就倒着推 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=r;i
阅读全文
posted @
2016-02-05 20:45
onlyRP
阅读(128)
推荐(0)
bzoj 1875
摘要:把边当做一个状态(orz居然有这种想法),初始点也看成边,然后矩阵快速幂就可以了(感觉有点像flyod) 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int
阅读全文
posted @
2016-02-04 21:18
onlyRP
阅读(171)
推荐(0)
bzoj 2301
摘要:先预处理莫比乌斯函数,再分块求 不会用公式编辑TAT,直接贴题解吧。。 从结论来看貌似也能用容斥原理? 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int
阅读全文
posted @
2016-02-03 13:33
onlyRP
阅读(118)
推荐(0)
bzoj 1257
摘要:今天题目看来看去都觉得不可以做啊,数论弱到不堪直视 分为2个部分,对于n>k部分直接n*(n-k) 对于n<=k部分,x%i=x-(x/i)*i,这样就可以枚举商,然后分段加起来。。 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l
阅读全文
posted @
2016-02-03 00:22
onlyRP
阅读(128)
推荐(0)
bzoj 2705
摘要:orz教主的解法实在太神了 直接贴题解 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=r;i--) 4 #define link(x)
阅读全文
posted @
2016-02-02 00:11
onlyRP
阅读(151)
推荐(0)
bzoj 2818
摘要:记得以前是用容斥原理过的?好吧现在只记得奇加偶减了。。。 转化题目成求满足x/p和y/p互质的数对,那和上题就差不多了 先欧拉筛求出phi的前缀和a[i],依次枚举每个素数p[i],排除(1,1)答案就是sigma(a[n/p[i]]*2-1) 1 #include<bits/stdc++.h> 2
阅读全文
posted @
2016-02-01 21:12
onlyRP
阅读(193)
推荐(0)
bzoj 2190
摘要:开始补我不敢碰的数论QAQ 看了资料感觉还是很晕,先把结论记下吧。。 若(x,y)符合提议gcd(x-1,y-1)=1,那么先欧拉筛法求出s=sigma(phi[i]),然后注意(1,2)(2,1)(2,2)3个点,答案就是2*s+1了 1 #include<bits/stdc++.h> 2 #de
阅读全文
posted @
2016-02-01 20:51
onlyRP
阅读(160)
推荐(0)
bzoj 1491
摘要:flyod时顺便算出c(s,t),我的计数原理要补补。。。
阅读全文
posted @
2016-02-01 00:31
onlyRP
阅读(90)
推荐(0)