自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 acm-马拉车算法学习笔记

引言本文主要介绍马拉车算法的原理及相关应用,并给出经典习题原理马拉车(manacher)算法主要用于解决回文串问题,它能够O(n)O(n)O(n)求出一个字符串每个位置的hhh数组值,h[i]h[i]h[i]代表的是从字符串的第iii个位置开始向右延伸能够到达的最大长度使得s[i−h[i]+1∼i+h[i]−1]s[i-h[i]+1\sim i+h[i]-1]s[i−h[i]+1∼i+h[i]−1]是一个回文串。首先对字符串预处理,即再每个字符间加上一个不在字符集中的字符(比如#)。考虑维护一

2021-01-01 16:40:39 267 1

原创 acm-kmp学习笔记

引言kmp相关算法主要用于解决字符串的匹配问题,本文除了探讨最基础的kmp算法,还会介绍扩展kmp算法,以及kmp自动机,注意本文主要写给作者看,很多基础的东西都没有讲,写得也相对比较随意kmp相关算法引言一、kmp算法1、原理2、代码3、习题二、扩展kmp算法1、原理2、代码3、习题一、kmp算法1、原理kmp最核心的思想就是充分利用已知信息,这样就可以避免不必要的重复检查。具体地,我们考虑模式串与匹配串之间的关系,假设模式串s2s2s2当前匹配到第iii位(即将匹配),匹配串s1s1s1

2021-01-01 11:59:03 219

原创 acm-(交互、bfs、dp)2018 ECNU Campus Invitational Contest E. Balance Reset

cf传送门vj传送门首先注意到ai<=100a_i<=100ai​<=100,也就是每次最多花费100100100,然后由于每次可以充100100100,那么其实当前的余额可以维持在[0,100)[0,100)[0,100)的范围以内(第一次除外)。考虑余额到达某个状态uuu所需要的最少物品数,记作dp[u]dp[u]dp[u],可以从状态000出发通过bfsbfsbfs更新出所有的可达状态以及其dpdpdp值。然后由于每个物品出现的概率都是12\frac 1221​,我们每天都检查.

2021-01-23 22:40:04 236

原创 acm-(交互题、思维、二分、子序列、好题)2020 年 “游族杯” 全国高校程序设计网络挑战赛 B. Binary String

vj传送门本题实在是非常妙,首先二分求出000和111中数量较小的一个的数量,方便起见,假设000数量最少,设cnt0,cnt1cnt_0,cnt_1cnt0​,cnt1​分别表示000和111的数量。假设序列是如下形式:111...10111..10111..1.....111..10111...1111...10111..10111..1.....111..10111...1111...10111..10111..1.....111..10111...1,即假设第i−1i-1i−1个000与第iii.

2021-01-23 10:50:37 320

原创 acm-(欧拉回路、思维、好题)2020 ECNU Campus Online Invitational Contest E. Even Degree

cf传送门vj传送门容易发现跟欧拉回路有关联,考虑先求出每个连通块的欧拉回路,并记录在队列中,然后考虑将队首的边依次放入答案序列中,并与此同时记录每个点的度数变化,如果当前边的两个端点的度数都是奇数,那么从队尾取边,直到队列中只有一条边的时候,就停止,然后考虑下一个连通块的删边顺序。欧拉回路如何求解呢?考虑从任意一个点开始dfs,遍历过的边都删除掉(用前向星),删除的方式就是改变h[u]h[u]h[u]的值即可,注意同一个点在dfs的过程中可能会多次访问,因此如果不删边会导致复杂度爆炸。#incl.

2021-01-22 23:05:11 199

原创 acm-(cdq分治、单调栈、好题)#2880. 「JOISC 2014 Day3」稻草人

原oj传送门vj传送门本题不太好讲述做法,大致上就是cdq分治的时候统计左半部分对右半部分产生的贡献,其中左半部分的点为左下角顶点,右半部分的点为右上角顶点。最开始的时候按照x坐标由小到大排序,cdq分治的过程中左右两半部分都分别按照从大到小的顺序排列,然后对左右两半部分分别维护一个单调栈,左半部分维护一个横坐标递减纵坐标递减的单调栈,右半部分维护一个横坐标递增纵坐标递减的单调栈。为什么要这样维护呢?先说说左半部分,如果当前点的横坐标大于栈顶的点,那么栈内的所有元素都不可能影响当前点对右半部分的点产.

2021-01-21 20:47:24 155

原创 acm-(树形dp)Educational Codeforces Round 52 (Rated for Div. 2) F. Up and Down the Tree

传送门设dp[u]dp[u]dp[u]表示以uuu为根节点的子树的答案,f[u]f[u]f[u]表示从以uuu为根节点的子树的根节点uuu出发按照题述规则遍历后能够回到uuu的父节点对应的遍历的叶子节点的最大数量。设md[u]md[u]md[u]表示uuu的子树中深度最小的节点,那么更新方程就是dp[u]=∑sonf[son]+maxson{dp[son]−f[son]}dp[u]=\sum_{son}f[son]+max_{son}\{dp[son]-f[son]\}dp[u]=∑son​f[son.

2021-01-20 23:43:31 104

原创 acm-(好题、kmp、思维、字符串)Good Bye 2020 G. Song of the Sirens

传送门设ans[i]ans[i]ans[i]表示www在sis_isi​重复的次数,我们要求的其实就是ans[k]ans[k]ans[k]。设g[i]g[i]g[i]表示www在sis_isi​中的重复次数,但是必须包含ti−1t_{i-1}ti−1​。于是不难写出ans[i]=2ans[i−1]+g[i]ans[i]=2ans[i-1]+g[i]ans[i]=2ans[i−1]+g[i],假设s[cur]s[cur]s[cur]是最小的满足len(scur)≥len(w)len(s_{cur})\.

2021-01-01 18:18:46 185

空空如也

空空如也

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

TA关注的人

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