ACM-BZOJ
syh0313
noip rp++
展开
-
【AHOI2013】差异
后缀自动机想到了其实挺简单的首先对于后缀的前缀,我们不太好维护,所以我们可以考虑将字符串倒过来,这样就变成了维护前缀的后缀!那么我们自然就想到了后缀自动机然后我们观察这个式子发现恰好是是求parent树上任意两点路径和,那么我们在parent树上算一下每条边的贡献就好了。对于一条边,他的贡献就是(len[x]-len[fa[x]])*si[x]*(n-si[x])现在我们来...原创 2019-12-22 21:09:52 · 194 阅读 · 0 评论 -
【NOI2018】你的名字
后缀自动机+主席树为这种精妙的字符串题调上一天真的是件很幸福的事呢!题意转化过来之后就变成:给一个串S,有若干个询问,每次询问给字符串T,整数 L,整数 R,询问有多少个子串k使得k是T的子串但不是S[L]....S[R]的子串1.首先我们考虑这个问题的弱化版本,每次询问的L≡1,R≡len(S) ——68pts对于T的每个[ 1 , i ]的前缀子串,我们假设其后缀在S中...原创 2019-12-17 22:42:46 · 277 阅读 · 0 评论 -
【HEOI2015】最短不公共子串
后缀自动机+序列自动机分别建出A,B两个串的后缀自动机和序列自动机,然后因为后缀自动机和序列自动机都是DAG,所以在上面dp一下就可以啦dp[i ][ j ]表示在第一个状态的自动机上匹配到 i 号节点,在第二个状态的自动机上匹配到 j 号节点时 还需要添加dp[i ][ j ]个字符才能使两串失配(满足条件) ,这个记忆化搜索一下就好了复杂度:O(N+N*N)#inclu...原创 2019-12-16 21:46:36 · 162 阅读 · 0 评论 -
【SDOI2016】生成魔咒
后缀自动机入门题因为后缀自动机上无相同字符串,所以每次添加一个字符之后增加的本质不同的字符串的个数就是len[x]-len[fa[x]]#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <map>using ...原创 2019-12-11 16:11:56 · 179 阅读 · 0 评论 -
【HAOI2016】找相同字符
后缀自动机入门题分别对两个串建后缀自动机,然后把endpos的大小算出来,最后在两个后缀自动机上一起dfs一遍并且算答案。#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;const int max...原创 2019-12-11 11:28:00 · 120 阅读 · 0 评论 -
【NOI2015】品酒大会
后缀自动机首先考虑第一问: 我们先将后缀自动机建出来,考虑每个节点,它出现的次数肯定是endpos的size(我们记为num),那么选取这个节点的串的方案数即为C(num,2)=num*(num-1)/2,所能贡献的长度区间为这个节点对应的所有串的长度即[ len[fa[x]]+1 , len[x]+1 ],这里可以差分一下,最后前缀和就是答案了。然后考虑第二问: 我们...原创 2019-12-11 10:33:19 · 153 阅读 · 0 评论 -
bzoj1057
单调栈对于每个位置(i,j)维护一个向下的最长的合法长度v[i][j]然后对于某一行来说问题就转换为:对于一个数列a[i],找一段连续的区间[l,r]是的(r-l+1)*min(l,r)这就是一个经典的单调栈问题了复杂度:O(n*m)/**************************************************************Pr...原创 2019-11-06 11:53:27 · 167 阅读 · 0 评论 -
bzoj1084
对于m=1的情况:dp[j][i]表示选到i位,选了j个的最优值对于m=2的情况:dp[l][i][j]表示第一列选到了i第二列选到了j选了l个的最优值/**************************************************************Problem: 1084User: syh0313Language: C++...原创 2019-11-06 10:58:37 · 153 阅读 · 0 评论 -
bzoj3524
主席树当时疯狂在想树套树+分块,自闭一下午结果一个正常的主席树就切掉了我太难了~#include <iostream>#include <cstdio>#include <cstdlib>#include <map>#include <algorithm>#define lch a[n].lc#define r...原创 2019-10-16 17:10:33 · 287 阅读 · 0 评论 -
bzoj1901
树状数组套权值线段树单点修改logn 然后树状数组将序列分成了log段 每段都暴力修改 这样一次修改的复杂度是log^2的然后查询就将这个[1,r]的所有权值线段树之和减去[1,l-1]的所有权值线段树之和,在这个值上面二分就可以了#include <iostream>#include <cstdio>#include <cstdlib>#in...原创 2019-10-16 12:52:12 · 142 阅读 · 0 评论 -
bzoj1236
数学+高精度题求导可知每份是3的时候最后乘积最大 /************************************************************** Problem: 1263 User: syh0313 Language: Java Result: Accepted Time...原创 2019-05-01 17:40:35 · 122 阅读 · 0 评论 -
bzoj1876
/**************************************************************Problem: 1876User: syh0313Language: JavaResult: AcceptedTime:1860 msMemory:18136 kb****************...原创 2019-05-01 17:06:57 · 94 阅读 · 0 评论 -
bzoj1452
二维树状数组or树套树树套树在bzoj上T了,在洛谷上AC了(卡着1000ms的上限跑的,交了n发才过)二维树状数组跑的飞快二维树状数组代码:/**************************************************************Problem: 1452User: syh0313Language: C++...原创 2019-04-22 19:24:12 · 174 阅读 · 0 评论 -
bzoj1213
高精度开根二分一下就ok了(一开始人傻了写了三分qwq)/**************************************************************Problem: 1213User: syh0313Language: JavaResult: AcceptedTime:10232 ms...原创 2019-05-02 14:27:39 · 110 阅读 · 0 评论 -
bzoj1257
数学分块按照k/i分成sqrt(n)块,块与块之间用等差数列算一算 /************************************************************** Problem: 1257 User: syh0313 Language: C++ Result: Accepted ...原创 2019-04-22 12:37:36 · 285 阅读 · 0 评论 -
bzoj4001
数学题易知n个节点的不同形态的二叉树种数f(n)就是卡特兰数而n个节点的不同形态的二叉树的叶子总数和g(n)=n*f(n-1)不会反演只会打表orz/**************************************************************Problem: 4001User: syh0313Language: C...原创 2019-04-21 21:54:31 · 173 阅读 · 0 评论 -
bzoj1432
规律题大胆猜测,无须求证,直接莽(今天晚上没啥状态......只能刷刷水题qwq)/**************************************************************Problem: 1432User: syh0313Language: C++Result: AcceptedTime:...原创 2019-04-21 21:02:37 · 147 阅读 · 0 评论 -
bzoj2120
分块暴力根据询问分成修改次数+1块每块里面不用分块直接莫队(本来想在块之间继续分块的,结果没分直接A了)/**************************************************************Problem: 2120User: syh0313Language: C++Result: Accepted...原创 2019-04-10 00:51:12 · 174 阅读 · 0 评论 -
bzoj3083
写这题的时候状态贼好,想了20min就想到正解了qwq首先链上赋值没难度吧,直接树剖后打标记区间赋值维护一下区间最小就好了然后考虑换根问题:(ro为当前根,x为要求的子树的根)1.当ro==x时,求全局最小2.当lca(ro,x)!=x时,说明此时根在x的子树外,莫得影响3.当lca(ro,x)==x时,说明此时根在x的子树内,倍增将ro将跳到x的son上,然后就查询出除s...原创 2019-04-15 14:53:26 · 167 阅读 · 2 评论 -
bzoj4026
首先要知道phi(x^k)=x^k-x^(k-1)=x^(k-1)*(x-1)=x^k*((x-1)/x)然后用主席树维护区间不同种质数的贡献(每种质数贡献(x-1)/x))就好了(和HH的项链比较像)但是卡了一天,一直T......qwq后面发现是找质因子的时候复杂度过大,因为如果有一个大质数,就会几乎跑满,如果都是大质数就......然后特判了如果除到质数就break就能A...原创 2019-04-09 19:43:55 · 155 阅读 · 0 评论 -
bzoj3505
数学题容斥一下,个数=总个数-三点共线的个数(垂直x,y轴共线,倾斜共线)/**************************************************************Problem: 3505User: syh0313Language: C++Result: AcceptedTime:344 ms...原创 2019-04-07 12:14:45 · 163 阅读 · 0 评论 -
bzoj2243
树链剖分题将树剖分后维护区间首尾的颜色区间合并的时候若左区间尾颜色==右区间首颜色,则a[n].num=a[lch].num+a[rch].num-1;否则a[n].num=a[lch].num+a[rch].num;然后就是注意在重链上跳累加答案的时候判一下该重链头和其父亲的颜色是否一致,一致的话sum--/************************************...原创 2019-03-28 14:49:41 · 173 阅读 · 0 评论 -
bzoj2115
线性基首先在1-n的任意一条路径上延伸出去的环可能对答案是有贡献的所以我们把这些环找出来,然后丢到线性基里(防止它们的贡献相互抵消)然后从线性基的最高位开始找起(有贡献就加入)/**************************************************************Problem: 2115User: syh0313...原创 2019-04-11 11:28:07 · 211 阅读 · 0 评论 -
bzoj1398
最小表示法最小表示法找到最小表示的首位,从首位开始匹配qwq/**************************************************************Problem: 1398User: syh0313Language: C++Result: AcceptedTime:556 msM...原创 2019-04-11 14:44:06 · 137 阅读 · 0 评论 -
bzoj3631
树链剖分晚上神志不清的时候写的,头晕眼花si初值忘记赋了,导致变成了随机连剖分(丢人.....)/**************************************************************Problem: 3631User: syh0313Language: C++Result: Accepted...原创 2019-03-29 10:19:28 · 142 阅读 · 0 评论 -
bzoj3884
数论好难啊.....真的学不来了qwq看了一些博客 问了问老师才有点思路这个东西好像可以递归搞f(p)=c^c^c.....^c mod p;由欧拉降幂公式:c^k mod p=c^( k mod phi(p) + phi(p) ) mod p;其中 k=c^c^c^....^c;所以有f(p)=c^( f(phi(p)) + phi(p) ) mod p;这样就由f(...原创 2019-04-02 18:11:29 · 622 阅读 · 0 评论 -
bzoj1011
分块乱搞注意:double*int和int开根号会掉精度,要在结果后面加上一个极小的数(1e-10)来防止掉精度/**************************************************************Problem: 1011User: syh0313Language: C++Result: Accept...原创 2019-04-08 16:22:09 · 89 阅读 · 0 评论 -
bzoj2456
精妙做法将不同的数相互抵消,最后剩下的就是众数开了个iostream库MLE了三发/**************************************************************Problem: 2456User: syh0313Language: C++Result: AcceptedTime:...原创 2019-04-11 23:35:52 · 220 阅读 · 0 评论 -
bzoj2729
组合数学题考虑两老师之间只有男生(情况1)和只有一个女生(情况2)情况1:A(n,n)*A(n+1,2)*A(n+3,m);情况2: A(n,.n)*C(m,1)*A(2,2)*C(n+1,1)*A(n+2,m-1);/**************************************************************Problem: 2729...原创 2019-05-02 15:11:41 · 124 阅读 · 0 评论 -
bzoj2653
二分+主席树个人感觉这道题非常好,思维难度高,代码好写(然而自己写的时候神志不清,转态全无qwq)首先要知道一个关于中位数的基本套路,将大于等于它的赋值成1,小于它的赋值成-1然后通过区间和就能找出中位数了对于本题来说:首先显然答案满足单调性,因为二分的是第k大的数,所以1,-1这个序列和肯定是单调变化的其次我们考虐将[a,b],[c,d]区间转化成[a,b],(b,c),...原创 2019-05-05 00:12:48 · 201 阅读 · 0 评论 -
bzoj2654
wqs二分首先二分一个白边所加的权值然后根据当前MST(若黑白边权值相同则优先选白边)中白边的数目二分若白边数过多,则增加所加的值若白边数过少,则减小所加的值/**************************************************************Problem: 2654User: syh0313Lang...原创 2019-09-25 15:48:20 · 318 阅读 · 6 评论 -
bzoj4516
后缀自动机板子题一开始把后缀自动机封装了直接ce两发orz本质不同的子串个数就是所有len[x]-len[fa[x]]的累加和然后insert一个字符算一次复杂度:均摊O(n) /************************************************************** Problem: 4516 User...原创 2019-09-17 16:33:29 · 155 阅读 · 0 评论 -
bzoj4025
时间线段树+启发式合并并查集启发式合并并查集只需要记录下合并前的转态,合并的时候按秩合并,然后根据之前记录的状态回退就好了我的代码常数有点大(早上交T了,晚上就卡着过了)/**************************************************************Problem: 4025User: syh0313La...原创 2019-08-14 20:37:08 · 197 阅读 · 0 评论 -
bzoj1861
splay1操作:从平衡树中取出这个数,把rank改成最小,再insert进去2操作:从平衡树中取出这个数,把rank改成最大,再insert进去3操作:取出x和它相邻的数(1是右相邻,-1是左相邻,0直接continue)4操作:查询x的rank5操作:查询rank=x的数/*************************************************...原创 2019-07-28 17:31:32 · 178 阅读 · 0 评论 -
bzoj2286
虚树如何构建虚树:step1:将询问点按dfs序排好,root节点作为非关键点先入栈step2:判断当前要加的点a[i]和sta[top]的关系 我们令lc=lca(a[i],sta[top]); (1).如果lc在栈sta中并且就是栈顶的话,直接将a[i]加入栈 (2).如果lc在栈sta中但是不是栈顶的话,一直弹...原创 2019-07-17 23:27:00 · 187 阅读 · 0 评论 -
bzoj2152
点分治按重心分治,每次暴力统计x下所有子树和的答案,分治进子树的时候减去该子树中的贡献即可复杂度:nlogn/**************************************************************Problem: 2152User: syh0313Language: C++Result: Accept...原创 2019-07-15 22:04:01 · 204 阅读 · 0 评论 -
bzoj1935
树状数组将询问差分成四个矩阵之后就变成一个二维偏序问题,用树状数组搞一搞就好了 /************************************************************** Problem: 1935 User: syh0313 Language: C++ Result: Accepte...原创 2019-07-02 17:39:48 · 229 阅读 · 0 评论 -
bzoj1176
CDQ分治裸题单点加询问子矩阵和因为矩阵过大,所以树套树肯定是要跪的那么我们考虑将子矩阵差分了,那么就是变成每次询问(0,0) 到(x,y)这个矩阵的和了那么直接cdq分治就好了 /************************************************************** Problem: 1176 Use...原创 2019-07-02 15:58:07 · 260 阅读 · 0 评论 -
2011 WorldFinal Machine Works
CDQ分治+斜率优化dp首先考虑dp,有dp[i]表示到第i天所获得的价值最大是多少(机器卖出),所以最后的答案就是dp[n+1]然后推一推式子:dp[i]=max(dp[j]+(d[i]-d[j]-1)*g[j]+r[j]-p[j])设当j>k时从dp[j]转移会比从dp[k]转移更优,那么有:dp[j]+d[i]*g[j]-(d[j]+1)*g[j]+r[j]-p[j]&...原创 2019-05-19 21:21:23 · 254 阅读 · 0 评论 -
bzoj1568
李超线段树李超线段树的每个节点维护一个区间,并且用标记记录当前区间上的最优线段的标号对于add一条新的线段:1.该区间无标记,则打上这条线段的标号2.若新线段在该区间上的左右端点的y值都>=原标记线段在该区间上的左右端点的y值,则新线段更优,直接覆盖3.若新线段在该区间上的左右端点的y值都<=原标记线段在该区间上的左右端点的y值,则原线段更优,直接return4...原创 2019-05-06 22:23:09 · 214 阅读 · 2 评论