- 博客(188)
- 资源 (1)
- 收藏
- 关注
原创 [补题]ICPC Mid-Central USA Region 2019
8.19的牛客模拟赛暑假里做了很多这种区域赛,但是还没有补题,最近会慢慢补完传送门A. Commemorative Race题意在一个有向无环图中,将其最长路的一条边删掉,然后再从这个起点开始,求所能达到的最长路径中的最小值。题解通过两次dfsdfsdfs解决,首先建立一个“超级源点”,向所有的点连边第一次dfsdfsdfs,从“超级源点”开始,处理出以iii点为起点能够达到的最长路径和次长路径长度——maxlen[i]maxlen[i]maxlen[i]和maxlen1[i]maxlen
2021-08-23 23:06:05
585
原创 luoguP1621 集合
链接题目Caima 给你了所有 [a,b] 范围内的整数。一开始每个整数都属于各自的集合。每次你需要选择两个属于不同集合的整数,如果这两个整数拥有大于等于 pp 的公共质因数,那么把它们所在的集合合并。重复如上操作,直到没有可以合并的集合为止。现在 Caima 想知道,最后有多少个集合。就是一道简单的并查集的问题,我写了好久,错了好多地方……错误:1.在判断两个数能否合并的函数中,写了一句if (pri[i]*2 > min(x, y)) break;本来想优化,但是这样就枚举不到小正数
2021-03-29 21:14:51
339
原创 [蓝桥杯][2013年第四届真题]危险系数
问题描述抗日战争时期,冀中平原的地道战曾发挥重要作用。地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。我们来定义一个危险系数DF(x,y):对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。本题的任务是:已知网络结构,求两站点之间的危险系数。题解这是一道dfs过
2021-03-24 09:45:18
304
原创 [蓝桥杯][历届试题]九宫重排
题目链接如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。我们把第一个图的局面记为:12345678.把第二个图的局面记为:123.46758显然是按从上到下,从左到右的顺序记录数字,空格记为句点。本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。题解这是我写过的第一道双向BFS的问题(大雾)双向BFS的一个好处就是从七点和
2021-03-23 23:47:26
165
原创 二分_水题整理
感觉自己现在的水平太洼了,连二分这种题都要调好久。感觉二分总是写不对啊,我真是太水了。。。T1路标设置在n个数之中插入k个数,使得相邻的两个数之间的差值的最大值最小。像这种最大值最小类型的题目,都是考虑使用二分策略;但是这道题我在第一次做的时候却想错了,我使用的贪心,我将相邻的两个数之间的差值进行排序,然后每次选出差值最大的一组数,然后从他们中间插入一个数。这样做的错误性在于 忽略了相邻的差值最大 这个条件。但是,我学会了使用priority_queue (也就是一个大根堆) 这个STL ST
2021-03-21 19:45:10
171
原创 从头再来——记录一些小问题
1.getchar的用法ch = getchar(); 只能接受单个字符, 输入的数字按照字符处理 输入多于一个字符时,只接收第一个字符 getchar直到按回车键才结束,可用于暂停程序的运行,直到收到下一个回车键 程序中有两个以上的getcar函数,应该一次性输入所有字符,再按回车否则会把回车传给后面的函数2.比较 ‘\n’ 和endl通常使用换行符\n,在其他情况下则使用控制符endl。一个差别是,endl确保程序继续运行前刷新输出(将其立即显示在屏幕上);而使用“\n”不能提供这样.
2021-03-16 18:28:17
166
原创 回首向来萧瑟处 也无风雨也无晴
转眼间,离开始学OI,也有一年多了,退役也有三四个月的时间了。blog有好长时间没有更。近期处理了一些评论,把之前写的博文(因为OI学的不深不浅,文章也写的不怎么样)中明显的错误,并对有评论提出的建议,都一一做了修正。在这里向,给我指出错误的人表示感谢。感谢你们! 以后,这里的blog还是会常常更新的,胡乱发一些东西,如果大家不嫌弃也可以过来看看。 什么时候退役的呢?SDOI2018 R1之后...
2018-08-09 08:48:30
2888
15
原创 [BZOJ 1966] [Ahoi2005]VIRUS 病毒检测(Trie / dp)
题目传送门题解方法一:trie树 标签是AC自动机,但明显不是AC自动机啊,根本没有失配指针的过程,只能叫Tire树吧 我们对每一个单词建立好Tire树之后,在树上进行bfs,进行匹配代码#include <cstdio>#include <cstring>#include <bitset>using namespace std...
2018-04-24 17:08:03
408
原创 [BZOJ2938][POI2000]病毒(AC自动机+dfs)
题目传送门题解这是一道比较锻炼思维的题,让我更加深的理解失配指针的作用 一般的AC自动机都是尽量多的匹配,这道题希望无限长,也就是希望能失配就失配,我们构造出trie树之后,在trie图(注意现在变成了一个图)上找环即可; 几点优化:根据trie树的性质.如果某个点的后缀是病毒,那么这个点肯定不能选 在dfs中,建立两个bool数组,一个需要回溯——用于在这条路径上找环,另一个不...
2018-04-22 16:21:27
358
原创 [BZOJ3172][Tjoi2013]单词(AC自动机)
题目传送门题解AC自动机 AC自动机第一题,感觉做起来非常不顺,感觉难点在于处理单词重叠的问题 大体的思路应该是,我们把每个单词出现的字母在fail树上进行累加,然后建立bfs序,把单词的字母的ans累加到单词的第一个字母上(应该是这样吧?),输出答案; 另一种实现方法:这是我刚开始想到的,在每个单词之间添加一个'#''#''#'分隔组成文章,在处理重叠单词上:我们的mp[k...
2018-04-22 14:32:30
321
原创 [BZOJ4516][Sdoi2016]生成魔咒(后缀数组+链表)
题目传送门题解这道题还是比较好的; 要求出每一个前缀本质不同的后缀的个数,那么我们可以把原序列倒过来,然后实际上就是对于每一个后缀求与其它后缀不重复的前缀个数,也即是后缀长度减去height值; 求出某一个后缀对答案的贡献之后,他不应该停留在元序列中对后续答案的求解产生影响,所以应该把它删除; 在实现方式上,可以使用链表,与平衡树的操作有些类似代码#inclu...
2018-04-18 12:37:09
506
原创 [bzoj4566][HAOI2016]找相同字符(后缀数组)
题目传送门题解这里:把两个串用一个很大的字符连接起来,求一个后缀数组。 考虑怎样暴力的算答案。 在rank rankrank数组中从前往后枚举起点,对于每个枚举的起点,都暴力的往后扫,扫的过程中维护一个height heightheight的最小值。每到一个点的时候,如果这个点跟起点不属于一个串,就将答案加上当前的最小值,这样是O(n2)的考虑这个还能怎...
2018-04-17 22:19:12
325
原创 [BZOJ1031] [JSOI2007]字符加密Cipher(后缀数组)
题目传送门题解裸 加密序列为所有排列排序之后的最后一个字符 把环展成链,统计答案的时候注意判断在一条链内即可代码#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const i...
2018-04-17 22:13:24
249
原创 [BZOJ3238][AHOI2013]差异(后缀数组+单调栈)
题目传送门 题解求一个定值减去所有后缀组合的lcp*2之和 O(n2)O(n2)O(n^2) 枚举所有的1≤i<j≤n1≤i<j≤n1\leq iO(1)O(1)O(1)求出lcp(Ti,Tj)lcp(Ti,Tj)lcp(T_i,T_j);n的范围无法承受 O(Nlog2N)O(Nlog2N)O(Nlog_2N) 根据height[]height[]height...
2018-04-15 09:37:48
331
原创 【BZOJ1717】[Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组+二分)
题目传送门题解求重复至少k次的最长子串长度(可重叠) 求出sa数组和height数组之后,二分出一个长度,判断height数组中大于这个值的数是否有k个代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using ...
2018-04-14 22:05:06
429
原创 [IOI1994]北京2008的挂钟(搜索)
题目传送门Vijos题解这是一道比较经典的搜索题 可见ABCDEFGHI九种方案每种最多使用4次,那么九重for循环枚举出出组合情况即可代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace...
2018-04-14 06:43:57
1295
1
原创 [BZOJ 1217] [HNOI2003]消防局的设立(贪心/dp)
题目传送门题解方法一:贪心 对于深度最深的点,肯定需要设置消防站来覆盖它,那么消防站的选取就有多种方案:父亲。祖父。兄弟。显然放在爷爷那里是最优的; 那么算法:每次选择一个深度最深且没有覆盖的点,在他的爷爷那里设置 一种巧妙的O(n):我们使用单调栈,按照bfs的顺序入栈(先进后出),那么最后取到的肯定是深度最大的。 方法二:树形dp 这道题和没有上司的舞会、战略游戏是比较像...
2018-04-11 17:15:29
526
原创 NoiOpenjudge水题选刷之_搜索
1789:算24 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。 比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1...
2018-04-10 22:15:43
824
原创 小a和uim之大逃离(路径dp)
题目传送门 在方格里起点终点任取,两个人绑在一起轮流取数,问有多少种方案可以使两个人取得的数在 %kkk 下相等题解其实这道题是没有思路的。看了题解。 f[i][j][p][k]f[i][j][p][k]f[i][j][p][k] 表示在 (i,j)(i,j)(i,j)处,两个人取的数之差为ppp.此时是第k(0/1)k(0/1)k(0/1)个人取; 初始化:f[i][j][a...
2018-04-09 13:30:58
273
原创 [BZOJ1088][SCOI2005]扫雷(DP/枚举暴力)
题目传送门题解解法一:搜索 我们可以发现,只要第一个位置确定了,下一个就都可以通过右边各自里的数唯一的推出来。 那么结果就只有可能是0、1、2; 那么我们两次chek判断是否合法即可 解法二:dp f [i] [j] [k] 表示第i个位置; j表示有没有地雷 ;k表示下一个位置有没有地雷; 分类讨论的思想,思路比较巧妙;代码代码一;#include <...
2018-04-08 22:06:17
385
原创 [游记]SDOI2018R1 游玩记
这次旅行就像是NOIp的翻版。Day -1出发前一天,骗了一下去年的Day1,结果全都爆零,感觉药丸;Day011:30在SLYZ出发,在路上也没有写多少板子,看了看赫胥黎的《美丽新世界》,和《1984》风格差不多,觉得这不是未来的世界而就是现在的世界。 到了核电,酒店还不错。 晚上去试机,感觉电脑用的还顺手,敲了敲Splay也没有测样例就回来了,Refun等队爷都敲了...
2018-04-08 16:04:13
478
原创 写给省选前的自己
提前声明:不喜勿喷省选的前一天晚上,坐在电脑前,写下这些文字。自从寒假里=绝食般抗争回到OI以来,已经浑浑噩噩地度过了两个月,学了一些之前没有见过的算法和数据结构,也算是写过了网络流;我基本上每次hu测都是爆炸,几乎失去信心 ;多项式FFT没有写过数学一窍不通,主席树动态树什么的都不会,后缀数组sa自动机搞不明白,只有时常写Ci的最大流和线段树、Splay等板子。 我没有Gay神...
2018-04-04 23:09:41
474
1
原创 不同子串个数(后缀数组)
题目传送门题解后缀数组的经典应用,重点在于这一句:ans+=(ll)(n-sa[i])-height[i];代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;#define l...
2018-04-04 06:45:49
840
原创 「BZOJ1012」[JSOI2008] 最大数(线段树/单调栈)
题目传送门题解写线段树的话太裸了,但是题意非常难搞,认真读题:其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。–>重新赋值从题解上看到一种单调栈的写法觉得非常巧妙 利用了题目的特性:每次都是在最后询问,用单调栈维护,开两个栈一个保存下标,一个保存他的值,在插入的时候把栈中比这个值小的都弹...
2018-04-03 22:15:43
277
原创 「BZOJ1878」[SDOI2009] HH的项链(线段树)
题目传送门题解这种统计种类(颜色)的问题总是很恶心;%%%REfun 首先对于所有询问的区间,按照右端点排序; 我们动态维护一棵线段树;从左到右枚举每个点,枚举到一个点: 1 、我们就把他的位置对应的线段树里加上值: 2、同时我们记录上一个同一个颜色的位置,把这个位置在线段树中删除; 我们判断,当前枚举到的点是否是一个询问区间的右端点(这就是我们为什么按照右端点排序的原因),区间...
2018-04-03 22:08:56
545
原创 [USACO11DEC]牧草种植Grass Planting(树链剖分)
题目传送门题解这道题就是把树链剖分中的点标记改成了边的标记,然后我就不会做了; 我么发现,每一个点对应着多个孩子,但是只有一个父亲,于是我们就可以把某个点到父亲的点的边的权值转移到这个点上; 如何防止把最近公共祖先也标记上,这就是树链剖分的一点小变形,找完连头之后左端点+1; 还是对算法理解的不够深刻。代码#include <cstdio>#include ...
2018-04-01 22:16:42
356
原创 [bzoj1861][Zjoi2006]Book书架(平衡树)
题目传送门题解这道题与其他的平衡树是另一种问题,这里的平衡树里面维护的是编号而不是权值。那么就不能用一般的inset 这样平衡树里面的元素就是无序的,我们怎样才能快速查询一个元素的值Top操作:首先找到原来的位置删除,然后把最左边的点旋转到根,在根的左子树上再插入这个元素.Bottom操作:方法同上Insert操作:我更喜欢叫她是Swap操作,把相邻的两个找出来交换值即...
2018-04-01 22:10:09
273
原创 送花(权值线段树)
题目传送门题解写这道题是为了写权值线段树 看到c的范围比较小,按照C为权值建立线段树,c的值就是线段树的叶子位置; 类似于平衡树的做法,查询最左或最有的节点删除代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#inc...
2018-04-01 06:48:38
410
转载 长期连载_ [置顶]马浩然(AH)语录或机房日常[学习无关]
原文来自CansultCute(Cansult)=∞Cute(Cansult)=∞Cute(Cansult) = \infty 我这么可爱是不…TheWinnerOfLife(AH⋅MHR)=∞TheWinnerOfLife(AH⋅MHR)=∞The\,Winner\,Of\,Life(AH\!\cdot \!MHR) = \infty以下是AH_MHR的经典语录...
2018-03-31 20:28:42
524
3
原创 [BZOJ1061] [NOI2008] 志愿者招募(最小费用最大流)
题目传送门题解这道题可以说代表了一类题。这道题和最长k可重区间集问题的建图方法是非常像的,并且这种问题都有两种建图方法,下面我来介绍一下; 我们暂且把这种问题叫做“选择区间问题”(口胡)吧;我考虑到当前点选择在某一个区间里面,会对“过去”产生影响,也会对“未来”造成影响(个人理解) 第一种建图方法:把每一天都拆点,点 i 到 i+n 容量为inf-a[i],费用为0,i+n到i...
2018-03-31 20:25:56
333
1
原创 [BZOJ1588][HNOI2002]营业额统计(平衡树)
题目传送门题解比平衡树模板还要简单的板子题; 就是每次插入一个元素,求其前驱和后继即可,求差累加较小值即可;我们可以事先再平衡树中插入 -inf 和 inf; 注意元素是课重复的,cnt数组就不要用了代码#include <cstdio>#include <cstring>#include <algorithm>using na...
2018-03-31 14:16:32
350
原创 「BZOJ2243」[SDOI2011] 染色(线段树+树链剖分)
题目传送门 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。题解这道题很好; 可以看出框架就是树链剖分,就是线段树比较复杂: 使用cl表示区间左端点的颜色,cr表示右端点的颜色,num表示区间内颜色区段的个数...
2018-03-31 14:10:35
242
原创 [USACO16FEB]负载平衡(枚举暴力/模拟)
题目传送门题解这道sb模拟都写不出来,还搞什么线段树,枚举切的边就可以过代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn=1e6+100;con...
2018-03-29 12:09:07
357
原创 [USACO10FEB]慢下来Slowing down(线段树+dfs序)
题目传送门题解这道题还是比较好的; 我们先考虑树形成一条链的情况,那就成了单点修改 区间查询操作,都是线段树的基本操作; 那么我们就使用dfs序的方法,把它变成一条链,那么某棵子树的区间就是 dfn[i]+tot[i]-1,进行区间修改,单点查询; 通过dfs序,我们实现了从二维降到一维,类似“索引表”的思想,大家可以去看看这道题—海港代码#include &...
2018-03-28 09:03:33
223
原创 [bzoj1503][NOI2004]郁闷的出纳员(平衡树)
题目传送门题解这道题还是比较好的 平衡树第一题,所以代码打的并不熟练 题目要求使用一种支持点的插入、删除,求名次的数据结构,平衡树当然是首选 题目中的加减操作都是对于所有员工的,我们不可能对所有的点进行修改,于是我们在开一个变量delta,用来记录所有的员工的工资的变化量,那么某个员工的实际工资就是x+delta; 然而我们考虑新加入的员工,对她加上历史的delta显然是不合适...
2018-03-27 20:40:30
1078
原创 [bzoj4698][SDOI2008]Sandy的卡片
题目传送门题解以后字符串的题就都打暴力了 后缀数组 多个串的最长公共子串 只要有n个>=len的height且其首字母属于不同的串就可以了代码后缀数组#include<iostream>#include<cstdio>#include<cstring>#include<cctype>#define ...
2018-03-26 22:08:37
259
原创 【模板】树状数组
单点修改区间查询#include<cstdio>#include<cstring>using namespace std;int n,m,a[1000001],c[1000001];int lowbit(int x) {return x & -x;}int change(int x,int y){ for (;x<=n;) {...
2018-03-26 22:01:47
176
原创 [bzoj1227][SDOI2009]虔诚的墓主人(线段树/树状数组)
题目传送门题解我在考场上写的是O(nm),找到一个空地就分别取上下左右的树的数量分别为a,b,c,d,那么这块 墓地的值就是C[a][k]*C[b][k]*C[c][k]*C[d][k]; 思路是没错的,我们考虑怎么使用数据结构优化时间和空间; 首先我们把每棵树按照y为第一关键字,x为第二关键字排序。然后统计每个行和列的树的数量; 从左往右做每一列,假设我们已经找到了在同一列...
2018-03-26 20:32:05
394
原创 [20180325 hu测]舞动的夜晚(最大流+Tarjan缩点)
题目传送门 Contest Hunter 是个好地方 题解首先感谢@xp学长的讲解 这是道网络流好题; 原来理解错了题意,然后WA的非常惨。并不是跑一个sb最大流输出方案; 也就是使二分图最大匹配减少的边的数量; 算法如下: 我们先随便跑出一个最大流,在残余网络上进行tarjan找强连通分量缩点,因为在一个无向图中的强联通分量意味这可以相互通达,割掉其中一条边后并不会...
2018-03-26 09:47:53
583
2
原创 XOR的艺术(线段树)
题目传送门题解比线段树2还要简单;异或的操作代码#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;const int maxn=1000000;const int inf=1e9...
2018-03-24 20:12:46
333
贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》
2018-02-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人