自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [BJOI2017]魔法咒语

一、题目点此看题二、解法观察数据范围,发现这道题需要对数据分类讨论。0x01 l<=100在AC\text{AC}AC自动机上dpdpdp,设f[i][j]f[i][j]f[i][j]为长度为iii,在自动机上匹配到了点jjj,暴力转移即可。0x02 l<=1e8 且 基本词汇长度不超过2这种数据最大的特点就是f[i]f[i]f[i]只可能从f[i−1],f[i−2]f[...

2020-01-31 17:22:17 246

原创 CF1043E Train Hard, Win Easy

一、题目点此看题二、解法建议多读几遍题,读懂了之后会发现暴力算法是O(n2)O(n^2)O(n2)。考虑选取的条件,假设应该选取iii做第一道题,jjj做第二道题:xi+yj<yi+xjx_i+y_j<y_i+x_jxi​+yj​<yi​+xj​xi−yi<xj+yjx_i-y_i<x_j+y_jxi​−yi​<xj​+yj​你会发现这样选取的条件就取...

2020-01-31 15:32:51 189

原创 CF1054D Changing Array

一、题目点此看题二、解法把一个区间异或和用异或前缀和的方式表示:sum[r] xor sum[l−1]≠0sum[r]\space xor\space sum[l-1]\not=0sum[r] xor sum[l−1]​=0正难则反,算出等于000的区间数再用总区间数减去即可。可以把sum[l−1]sum[l-1]sum[l−1]的值放入map...

2020-01-31 14:49:19 145

原创 [SDOI2014]数数

一、题目点此看题二、解法本篇题解受这位大佬的启发,在此感谢。数据太水,但是此方法能通过hackhackhack数据,

2020-01-31 12:24:10 212

原创 [TJOI2013]单词

一、题目点此看题二、解法考虑计算方法,在自动机上匹配是再暴力跳failfailfail,一个单词出现的次数就是被跳到的次数。在插入时就把一路打上标记,然后在failfailfail树上用这些标记树上差分,最后直接统计即可,时间复杂度O(n)O(n)O(n)。#include <cstdio>#include <cstring>#include <vect...

2020-01-31 10:32:56 239

原创 [USACO15FEB]审查

一、题目点此看题二、解法本题最重要的条件是:列表中的单词不会出现一个单词是另一个单词子串的情况,所以下图的情况是不可能出现的(大包含小,却删掉了小)。所以就是AC\text{AC}AC自动机板题了,用栈维护一下就行了,时间复杂度O(n)O(n)O(n)。#include <cstdio>#include <cstring>#include <queue...

2020-01-31 10:15:20 163

原创 [USACO12JAN]视频游戏的连击

一、题目点此看题二、解法又是一道AC\text{AC}AC自动机上dpdpdp的题,随手乱切。设f[i][j]f[i][j]f[i][j]为长度为iii,在自动机上匹配到jjj点的最大值,一开始全赋最小值,在failfailfail树上求一个链的前缀和,直接转移即可,时间复杂度O(3×15×nk)O(3\times 15\times nk)O(3×15×nk),贴个代码。#include...

2020-01-30 21:57:06 131

原创 [JSOI2007]文本生成器

一、题目点此看题二、解法AC\text{AC}AC自动机上dpdpdp,这里有一个加强版设f[i][j]f[i][j]f[i][j]为长度为iii,匹配到了自动机上的点jjj。dpdpdp时直接暴力转移即可,注意当出现了一个认识的单词后立即算贡献,未填的随便选,停止它的转移。时间复杂度O(26×100×nm)O(26\times 100\times nm)O(26×100×nm),贴个代...

2020-01-30 21:29:59 154

原创 [SCOI2012]喵星球上的点名

一、题目点此看题二、解法0x01 AC自动机如果字符集没有这么大的话,就是AC\text{AC}AC自动机的板题。我们可以开mapmapmap存转移,然后就完了,写了之后对mapmapmap的理解会有所提升吧,虽然是过不了luoguluoguluogu的...

2020-01-30 18:02:42 200

原创 [CQOI2014]通配符匹配

一、题目点此看题弱化版:[AHOI2005]病毒检测二、解法先把*当成分割符,这样带通配符的串就被划分成了若干个小串,我们对于每一个小串在去另一个串中匹配。对于每一个小串,以?为分割符,将它插入AC\text{AC}AC自动机中,标记终止节点,把在小串中的终止位置存在ed[x]ed[x]ed[x]中(类型为vectorvectorvector),然后我们把一个点在failfailfail...

2020-01-30 16:18:50 356

原创 [NOI2011]阿狸的打字机

一、题目电磁看题二、解法我们先对输入的字符串建出ACACAC自动机,自动机的点数是O(n)O(n)O(n)的,建法如下:遇到小写字母,跳自动机上的边,看是否需要新建点。遇到P,存下字符串对应在自动机上的点编号。遇到B,向当前点的父亲上跳。考虑xxx串在yyy串的出现次数,具体过程就是在自动机上跳到yyy,路径上的每一个点都去跳failfailfail,跳到xxx对应点的次数即为出...

2020-01-30 12:08:42 162

原创 HXY造公园

水题愉悦身心一、题目点此看题二、解法本题的关键问题就是维护树的直径,一开始可以跑一个树形dpdpdp求直径,我们考虑合并两颗树。最优的方式就是取两颗树直径的中点,然后链接,具体就是:len[y]=len[y]+12+len[x]+12+1len[y]=\frac{len[y]+1}{2}+\frac{len[x]+1}{2}+1len[y]=2len[y]+1​+2len[x]+1​+...

2020-01-29 18:02:21 236

原创 [BZOJ 4173]数学

一、题目二 、解法又到了欢乐推式子时间,先推那个判断式(本文所有除法均为整除):m%k+n%k≥km\%k+n\%k\geq km%k+n%k≥km−mkk+n−nkk≥km-\frac{m}{k}k+n-\frac{n}{k}k\geq km−km​k+n−kn​k≥kn+mk−mk−nk≥1\frac{n+m}{k}-\frac{m}{k}-\frac{n}{k}\geq1kn+m​−...

2020-01-29 13:45:39 243

原创 [GDKOI2013]大山王国的城市规划

一、题目二、解法建出回文自动机,自动机上的每一个节点都代表一个回文串,我们考虑一个串不是另一个串子串的问题。分情况考虑,首先选的节点必须不同。然后就是两边个去掉一个字符(重复若干次)不能相等,反应到自动机上就是没有父子关系。还有一种就是不能是前缀后缀回文串,反应到自动机上就是failfailfail树上没有父子关系。构建一个有向图,把回文树和failfailfail上的边当成有向边加进去...

2020-01-29 12:36:08 427

原创 [hackerrank Palindromic Border]

一、题目二、解法从一个O(n2)O(n^2)O(n2)的解法讲起吧,我们考虑每一种子串的贡献,如果这个子串是回文的,设它的出现次数为xxx,那么选两个不同的出现位置即会有1的贡献,求和x(x−1)2\frac{x(x-1)}{2}2x(x−1)​即可。既然是回文串,考虑用回文自动机来优化,我们加入逐个右端点iii,得到以iii结尾的最长回文子串lastlastlast,我们考虑把所有以ii...

2020-01-29 11:54:18 207

原创 [ZeroJudge b179]Cans

一、题目传送门(可能传不进去)二、解法在ACACAC自动机上dpdpdp,设dp[t][i][j]dp[t][i][j]dp[t][i][j]表示第ttt天字符串的长度为iii,在非法字符串的自动机上的点为jjj的方案数,考虑转移:加入a-d的一个,直接枚举选哪个,然后在自动机上直接跳,需要判断转移后是否非法。删去首位,分情况讨论。如果删去后长度为000,直接丢进回收站。如果删去后...

2020-01-29 11:21:22 331

原创 [HDU 5659]CA Loves Substring

一、题目点此看题题目描述多组数据,给你一个字符串,求从每一个字符断开(分成s[1,i]s[1,i]s[1,i]和s[i+1,n]s[i+1,n]s[i+1,n])分成的子串中本质不同的字符串数量,输出需要压缩,详见英文版题目。数据范围1≤n≤2000001\leq n\leq2000001≤n≤200000二、解法正难则反,我们考虑计算出本质不同的子串数量,然后计算出跨过断开处且没有...

2020-01-28 18:00:19 161

原创 [自学笔记]各种自动机

AC自动机yyb巨佬的博客贴一个模板题的代码:#include <cstdio>#include <cstring>#include <queue>using namespace std;const int M = 1000005;int read(){ int x=0,flag=1;char c; while((c=getchar())&...

2020-01-27 17:37:13 177

原创 [CF468D]Tree

一、题目点此看题二、解法先考虑第一个问题,如何得到所求的最大和。我们可以对原式做下列变换:∑i=1ndis(i,pi)=2∑i=1ndep[i]−2∑i=1ndep[lca(i,pi)]\sum_{i=1}^n dis(i,p_i)=2\sum_{i=1}^ndep[i]-2\sum_{i=1}^ndep[lca(i,p_i)]i=1∑n​dis(i,pi​)=2i=1∑n​dep[i]−...

2020-01-25 16:46:15 205

原创 [CF620F]Xors on Segments

一、题目点此看题二、解法0x01 暴力dp观察数据范围发现,本题允许O(n2)O(n^2)O(n2)的算法,考虑dpdpdp。我们做nnn次dpdpdp,每次固定左端点,移动右端点并记录,每次更新左端点。最后更新包含其的询问,详见代码。#include <cstdio>#include <iostream>using namespace std;const ...

2020-01-24 11:31:47 336

原创 [WC2016]鏖战表达式

一、题目点此看题二、解法如何求解这个表达式的值?一个很显然的想法就是找到优先级最小的运算符然后把整个表达式分成两半,递归求解。我们需要维护一棵表达式树,比如说treaptreaptreap,它满足下列性质:每个节点是一个数字,或者是一个操作符。中序遍历结果原本的表达式。将数字视为最大的优先级,父节点的优先级小于子节点的优先级。举个例子,(用了JZM的图,qwqqwqqwq)还...

2020-01-23 20:49:03 373

原创 阿凡达(类欧几里得算法)

一、题目二、解法由于nnn很大,但是操作数很小,且一开始没有初值,很容易想到动态开点,时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)。剩下的问题是如何计算一个修改段内的和,注意到(i−l+1)⋅x%y=(i−l+1)⋅x+(i−l+1)⋅xy(i-l+1)\cdot x\% y=(i-l+1)\cdot x+\frac{(i-l+1)\cdot x}{y}(i−l+1)⋅...

2020-01-23 17:17:28 317

原创 [BZOJ十连测]线段树

一、题目二、解法在若干次操作后,某一个位置的值可以表示成若干各区间的最大值。例如位置kkk,我们找到当前操作前最后一个(编号最大但小于当前编号)覆盖当前区间左端点的操作的左端点,最后一个覆盖当前当前区间右端点的操作的右端点,把这个左右端点当成一个新的操作区间,然后重复执行上述操作。也就是我们需要一直向左找,一直向右找,找到最左的和最右的ll,rrll,rrll,rr,kkk位置上面的即是...

2020-01-23 13:56:18 299

原创 [BZOJ 4842] Delight for a Cat

一、题目二、解法考虑网络流,图这样建:总结一下建图方法:S′S'S′向SSS连边,容量为RRR,边权为000(注意,这一部分在图上没有画出来)源点连接[1,k][1,k][1,k]中的每个点,容量为RRR,边权为000。点iii连点i+1i+1i+1(没有连TTT),容量为R−LR-LR−L,边权为000。点iii连点i+ki+ki+k(没有连TTT),容量为R−LR-LR−L,...

2020-01-21 21:18:33 228

原创 CF786E ALT

一、题目点此看题二、解法可以考虑网络流,建图方法如下:源点连每一个人,容量为111。人连对应路径上的所有边,容量为infinfinf。所有边连汇点,容量为111。然后我们在建好的图上跑最小割,因为人连路径的边是砍不动的,我们只能砍源点到人或者边到汇点的边,这个时候就交给电脑去决策就行了,显然上述建图方法满足题意。还有一个问题就是第二个方法建出的边会很多,我们可以用线段树优化建图...

2020-01-21 20:51:11 177

原创 [UOJ 176]新年的繁荣

一、题目点此看题二、解法考虑kruskalkruskalkruskal算法,我们不能去枚举每一条边,但是边权较小,我们可以从大到小枚举边权。设当前枚举到的边权为iii,我们定义a[i]a[i]a[i]为二进制下包含子集iii的权值,我们可以用O(m)O(m)O(m)的时间把以前的aaa拿过来用(枚举a[i and 2j]a[i\space and\space 2^j]a[...

2020-01-21 20:20:05 264

原创 Center

一、题目二、解法我们首先做floydfloydfloyd,求出任意两点最短路,然后我们枚举一条边(u,v)(u,v)(u,v),其长度为ccc,设终点在这条边上,对于任意一个点iii,它的贡献是min⁡(dis[i][u]+x,dis[i][v]+c−x)\min(dis[i][u]+x,dis[i][v]+c-x)min(dis[i][u]+x,dis[i][v]+c−x),我们要求的就是...

2020-01-21 19:09:45 194

原创 [BZOJ 4931]塔

一、题目二、解法假设我们已经的到了一个答案lenlenlen,我们在插入操作后考虑扩展这个lenlenlen,每次插入一个点,多插的点会让回文串有机会为len,len+1len,len+1len,len+1,我们可以用hashhashhash判断新插入的点构成的回文串,时间复杂度O(1)O(1)O(1)。前插和后插,hashhashhash可以!撤回操作,hashhashhash可以!我们...

2020-01-21 13:51:49 176

原创 [BZOJ 4259]残缺的字符串

一、题目点此看题二、解法我们一般的匹配多是第一种形式,如果我们把某一个字符串翻转,那么匹配的形式就变成了第二种,是不是很像卷积的形式,如果我们把匹配当做卷积的话,那么时间是允许的,我们考虑这种方法。首先通配符可以看做000,我们可以把某个位置yyy匹配成功的条件写成:∑i=1yTi×Sy−i+1×(Ti−Sy−i+1)2\sum_{i=1}^y T_i\times S_{y-i+1}\...

2020-01-21 07:59:48 203

原创 [ASC]PROB

一、题目二、解法要求第kkk小,可以用类似线段树的方法逐位确定,先考虑全空的串,怎么求长度为nnn的borderlessborderlessborderless串?我们定义f[i]f[i]f[i]为长度为iii的borderlessborderlessborderless串数量,转移考虑容斥:f[i]=2i−∑j=1i/2f[j]×2i−2jf[i]=2^i-\sum_{j=1}^{i/...

2020-01-20 21:37:11 168

原创 [51nod 1444]打字的猴子

一、题目二、解法考虑dpdpdp,设E[i]E[i]E[i]为已经成功匹配到了iii,想要匹配到nnn的期望,那么答案就是E[0]E[0]E[0],考虑多匹配一个字符后的影响,我们用transtranstrans来描述它,转移如下:E[x]=1k∑i=1kE[trans[x][i]]+1E[x]=\frac{1}{k}\sum_{i=1}^k E[trans[x][i]]+1E[x]=k1...

2020-01-20 21:09:21 318

原创 [bzoj十连测]Problem

找不到题,没有代码qwqqwqqwq一、题目题目描述有一颗字典树tiretiretire,现在每次加入一个叶子,你需要回答这个点到根路径代表的字符串的最长公共前缀后缀是多少,强制在线。数据范围节点数,操作数,字符集大小均为100000100000100000以内。二、解法最长公共前缀后缀显然是kmpkmpkmp,但是kmpkmpkmp的均摊复杂度分析在树上就失效了,我们要用其他方法。...

2020-01-20 20:34:17 216

原创 [BZOJ 2658]小蓝的好友

一、题目二、解法正难则反,求至少包含一个黑格子就等于全部减去不包含黑格子的方案数。考虑单调栈,对于每一行,求出每一个点最长上升,不碰到黑格子的距离,得到一个数组upupup,本题的一个重要条件是数据随机,我们对upupup数组建立treaptreaptreap,其中下标作为减值,upupup作为修正值,这样建出来的数满足根节点的upupup最小,而且由于upupup随机,能够保证复杂度是l...

2020-01-20 20:02:47 190

原创 [清华集训2015]V

一、题目点此看题二、解法本题的难点有两个:区间减(带比较),历史最大值。先解决第一个问题,带比较的区间减,我们也仿照这种形式,重新设计操作模式,设一个操作二元组(x,y)(x,y)(x,y),假设对ppp操作,得到的值为max(p+x,y)max(p+x,y)max(p+x,y),我们可以把三种修改都变成上述的形式:区间加法,设计二元组(x,−inf)(x,-inf)(x,−inf)...

2020-01-20 14:00:56 350

原创 [BZOJ 3821]玄学

一、题目UOJ的传送门二、解法离线的做法这道题强制在线,但是没有关系,我们讲一下离线的做法,会很有启发。考靠把询问和修改都放在[1,n][1,n][1,n]上面,我们从111扫到nnn,设当前点为xxx,我们维护包含当前点的操作为一颗线段树(树上节点表示连续的操作编号),当xxx为某一个操作的左端点时,加入这个操作的a,ba,ba,b,如果是某一个操作的右端点,删去这个操作的a,ba,b...

2020-01-19 21:05:02 487

原创 纪念碑

别问我这道题哪儿来的,我找不到题目链接,所以我只能写思路。一、题目题目描述在nmnmnm的网格中,给kkk个矩形建筑,问一个最大边长的正方形,使得这个正方形内不包含任何建筑。数据范围n,m≤106,p≤40000n,m\leq10^6,p\leq40000n,m≤106,p≤40000二、解法看到这道题会有很多想法,我就主要讲一下扫描线的做法吧。我们设两条在xxx轴上的扫描线l,r...

2020-01-19 16:08:09 168

原创 [NOI2014]魔法森林

一、题目点此看题二、解法有一个明显的思路,就是对于每一个aaa的取值,我们找到最小的bbb,用它们去更新答案。具体来说,先把边按aaa从小到大排序,然后对于当前的aaa,就把它当做最大的aaa,现在我们要让最大的bbb最小,这不就是最小生成树吗,只是我们要动态维护,剩下的就变成了这道题,贴上代码:#include <cstdio>#include <iostream&...

2020-01-18 12:45:22 207 1

原创 Codechef MARCH14 GERALD07加强版

一、题目点此看题二、解法考虑计算一个无向图联通块的数量,一个大致的思路就是用有贡献的边来算,道理很简单,就是如果加入一条边构成了环的话,那么这条边是没有贡献的,联通块数量为n−xn-xn−x,xxx为有贡献的边数。考虑计算这个边数,一个很重要的条件就是选的边是在[l,r][l,r][l,r]这个区间内的。如果我们从一开始加入边,很多没有贡献的边可能在区间询问的时候产生贡献,关键就在于替换环...

2020-01-17 22:57:47 146

原创 [WC2006]水管局长

一、题目点此看题二、解法简述一下题意吧,本题就是给你nnn个点mmm条边,支持下面两种操作:1、询问(x,y)(x,y)(x,y)所有路径上最大值的最小值。2、去掉边(x,y)(x,y)(x,y),保证边在给定的mmm条边中,并且图任何时候联通。考虑询问,如果我们能维护一棵最小生成树,那么(x,y)(x,y)(x,y)在最小生成树上路径的最大值即是答案,但是本题需要删边,我们可以把...

2020-01-12 12:54:00 184

原创 [SDOI2017]天才黑客

一、题目点此看题二、解法真的毒瘤,我 TM 搞了三个小时,调起来太 TM 爽了。言归正传,这道题很容易想到一个最短路解法,我们把每条边拆成两个点,它们之间的边权值都是原来的边权,然后对于每个点(原图),我们把入点和出点暴力连边,边权为lcplcplcp(字典树上lcalcalca的深度−1-1−1),这个做法可以拿到000分的高分,因为入点和出点相连时边数最多是m2m^2m2,然后时间复...

2020-01-12 10:58:48 696

空空如也

空空如也

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

TA关注的人

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