![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
题解
Little_Fall
冲冲冲!
展开
-
leetcode周赛 299
经典 rustwa 两次,一次是因为运算的最终结果没有取模,一次是因为初始值选的有问题,建议直接 i32::MAX/2ABCD原创 2022-06-26 11:45:49 · 118 阅读 · 0 评论 -
Codeforces 1696E. Placing Jinas 高维前缀和、组合数取模
记 sum[k][i] 表示 k 维前缀和的第 i 项,比如:sum[0] = 0, 1, 0, 0sum[1] = 0, 1, 1, 1sum[2] = 0, 1, 2, 3sum[3] = 0, 1, 3, 6, …那么答案就是 sigma(sum[i+2][ai]).高维前缀和单点可以用组合数求,sum(k,n) = C(n+k-2, n-1),放到答案里也就是 sigma(C(i+ai, i+1)).相关的具体说明有个 quora 答案写的挺好:https://qr.ae/pvo6rl组合原创 2022-06-26 02:20:09 · 391 阅读 · 6 评论 -
Codeforces1696D. Permutation Graph,静态区间最大最小值,ST表
从 1 到 n 的路径一定要经过两个极值点,以此递归即可获得最优解。需要支持的操作是求静态区间的最大/最小值,可以用 ST 表,现场把我四年前的博客翻译成 rust…https://blog.csdn.net/m0_37809890/article/details/82585410......原创 2022-06-26 02:10:58 · 296 阅读 · 0 评论 -
【小题解】字符串排列
Leetcode 剑指 Offer 38爷青回。next_permutation 60ms使用库函数遍历每个排列。class Solution {public: vector<string> permutation(string s) { vector<string> result; sort(s.begin(), s.end()); do { result.push_back(s);原创 2020-09-12 12:55:31 · 164 阅读 · 2 评论 -
【题解】12个硬币,有一个假币,3次称量将其找到并说明是重还是轻
背景某个最强王者之前问我的一道题目,为了防止图丢失,将其传到博客上。题目12个硬币,有一个假币(不知比正常轻还是重),3次称量将其找到并说明是重还是轻。思路本质是利用信息熵去解决,题目的信息熵是12*2=24,3次称量可以获得的信息是3^3=27,所以理论上可行。每次称量尽量造成信息熵减少(类似于动态规划)。注:可获得信息大于信息熵时是理论上可行,实际中有不可行的情况,比如需要借一个...原创 2020-03-09 11:31:02 · 5405 阅读 · 0 评论 -
【题解】Leetcode 41. 缺失的第一个正数 / 84. 柱状图中最大的矩形
41. 缺失的第一个正数给定一个未排序的整数数组,找出其中没有出现的最小的正整数。你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。// 将数字 num 放到 num-1 位置,只需要一个临时变量// 然后扫描一次即可func firstMissingPositive(nums []int) int { for _, num := range nums { for no...原创 2020-02-17 21:52:57 · 225 阅读 · 0 评论 -
【题解】LeetCode 51. N皇后 / 52. N皇后 II
总结用的是标准算法,51题超过了98.5%,52题执行时间为0.解法说明还是在注释中。golang 没有引用,很多地方都会用到指针。之前我在 C++ 中有意识不用指针,到这里不应该有这个习惯。切片本身也是值,形参 append 不会改变实参的 len,可以传递指针。但确实会改变底层的值。将一个仍会被使用的切片 append 到别的数据结构是很危险的,它的值会被改变。可以使用 copy ...原创 2020-02-16 20:53:30 · 223 阅读 · 0 评论 -
【题解】LeetCode 4 寻找两个有序数组的中位数
使用 go 语言,算法解释写在注释中。题面给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。本地测试器package mainimport "fmt"type TestCase struct { nums1, nums2...原创 2020-02-16 19:33:10 · 173 阅读 · 0 评论 -
【题解】CCPC-Final 2019 C. Mr. Panda and Typewriter 后缀自动机+启发式合并,DP
给定长为n(5000)n(5000)n(5000)、字符集1e91e91e9的字符串,给定x,y,z(1e9)x,y,z(1e9)x,y,z(1e9),问最少花多少时间能够打字打出这个字符串。关于打字的操作有三种:花费xxx时间,在末尾打出一个字符。花费yyy时间,复制已经打出的字符串的一个子串。(剪贴板改变)花费zzz时间,在末尾粘贴复制的字符串。(剪贴板不变)动态规划状态表...原创 2019-12-12 20:47:18 · 1056 阅读 · 4 评论 -
【题解】Codeforces533F. Encoding 按字符分解,AC自动机
给一个文本串,一个模式串,2e5,输出文本串的哪些位置和模式串荣誉匹配。A和B荣誉匹配是指,A和B长度相同,并且如果存在若干个没有重复字母的荣誉转换<c1,c2>,把A中的每个c1都换成c2,每个c2换成c1,然后它和B相等。把文本串和模式串分别按字符分解成262626个字符串,所谓按字符分解是指:第一个串,在原串是aaa的位置上是1,否则是0第二个串,在原串是bbb的位置...原创 2019-11-22 02:31:56 · 603 阅读 · 0 评论 -
【题解】Codeforces 727E. Games on a CD AC自动机
给定n,k(1e5,n∗k≤1e6)n,k(1e5,n*k\le 1e6)n,k(1e5,n∗k≤1e6),给定一个长为n∗kn*kn∗k的环形字符串,已知它由nnn个长为kkk的互不相同字符串相接而成。再给定g(g≥n)g(g\ge n)g(g≥n)个长为kkk的字符串,两两不同,总长不超过2e62e62e6.问环形字符串是由哪些字符串首尾相接(每个字符串只能出现一次)组成的,输出时可以选定...原创 2019-11-21 23:20:00 · 341 阅读 · 0 评论 -
【题解】Codeforces873F. Forbidden Indices 后缀自动机
给定一个长为n(2e5)n(2e5)n(2e5)的字符串sss,一些位置被标记为不可用。找到一个子串,长度∗合法出现次数长度*合法出现次数长度∗合法出现次数最大,合法出现次数是指endpos不在不可用位置上的出现次数。求最大的长度∗合法出现次数长度*合法出现次数长度∗合法出现次数。令不合法的位置不产生cnt的贡献即可,SAM模板掌握题,既然写题意了就发出来吧。/* LittleFall...原创 2019-11-21 22:11:19 · 237 阅读 · 0 评论 -
【题解】Codeforces 441D. Valera and Swaps 排列与环的转换
对于一个1到n1到n1到n的排列ppp,定义f(p)f(p)f(p)为最少所需的交换次数(不要求相邻),使得pi=ip_i=ipi=i。给定长为n(3000)n(3000)n(3000)的排列ppp和m(3000)m(3000)m(3000),问最少需要几次交换,可以使得f(p)=mf(p)=mf(p)=m.输出字典序最小的方案。按如下方法建立nnn个节点的有向图:如果aaa位置上的数字...原创 2019-11-20 23:08:28 · 214 阅读 · 0 评论 -
【题解】Codeforces316G Good Substrings 后缀自动机,多串
字符串板刷 23/57,24/5723/57, 24/5723/57,24/57有n(10)n(10)n(10)个规则,每个规则由字符串ppp以及整数对l,rl,rl,r构成。如果一个字符串ttt在ppp中的出现次数在[l,r][l,r][l,r]内,就说明ttt满足了规则<p,l,r><p,l,r><p,l,r>.如果一个字符串满足了所有nnn个规则,就...原创 2019-11-20 05:17:10 · 235 阅读 · 0 评论 -
【题解】Codeforces19C. Deletion of Repeats 后缀数组
给定一个字符串,长为n(1e5)n(1e5)n(1e5),字符集1e91e91e9,保证每个字符最多出现10次。定义重复:长为偶数的子串,左半部分和右半部分完全相等。每次选择最短、最靠左的一个重复,删除它的左半部分,以及这个重复左边的所有字符。输出没有重复时的字符串。每个字符最多出现10次,所以重复的个数一定不会超过5e55e55e5。处理所有字符出现的位置,通过lcp判断是否出现重复...原创 2019-11-20 02:33:10 · 247 阅读 · 0 评论 -
【题解】Codeforces149E. Martian Strings 前缀函数
字符串板刷 21/5721/5721/57给定一个长为n(1e5)n(1e5)n(1e5)的字符串SSS,然后给定m(100)m(100)m(100)个长度不超过100010001000的模式串。考虑所有的T=S[a..b]+S[c..d],c>bT=S[a..b]+S[c..d],c>bT=S[a..b]+S[c..d],c>b,问有几个模式串在至少一个TTT中出现.对...原创 2019-11-19 22:28:39 · 265 阅读 · 0 评论 -
【题解】Codeforces 427D. Match & Catch 后缀自动机
给定两个字符串A,B(5000),找到最短的唯一公共子串,无解输出-1.唯一公共子串是指在A和B中均只出现了一次。对A#B建立后缀自动机,维护endpos集的三个属性:出现次数cnt、第一次出现位置firstpos、最后一次出现位置lastpos.遍历所有节点,如果cnt=2且firstpos<#所在位置firstpos<\#所在位置firstpos<#所在位置,last...原创 2019-11-13 15:14:57 · 217 阅读 · 0 评论 -
【题解】Codeforces 471D. MUH and Cube Walls 差分KMP
给定两个整数序列A,B(2e5)A,B(2e5)A,B(2e5),求BBB的差分序列在AAA的差分序列中的出现次数.首先如果BBB的长度是111,答案就是AAA的长度。否则做差分,然后整数KMP.题目一点不难,但是写了几次都有问题,很多问题都在于,KMP算法很多地方都用了字符串结尾是\0这个性质,但是整数KMP是不能这样的。重新总结一套鲁棒性强的板子。需要注意的是if之后新的前缀函数值不...原创 2019-11-13 14:11:07 · 206 阅读 · 0 评论 -
【题解】Codeforces 633C. Spy Syndrome2 AC自动机
给出句子的加密规则:字母全部变成小写反转每个单词移除所有空格。现在给定一个加密后的句子(1e4)(1e4)(1e4),一个可用的单词表(1e5个,总长总长不超过1e6)(1e5个,总长总长不超过1e6)(1e5个,总长总长不超过1e6),输出任意一个加密前的句子,保证有解。把单词小写后反转插入到AC自动机中,现在只需要把文本串拆分成模式串。用f[i]f[i]f[i]表示[1,i]...原创 2019-11-13 12:47:09 · 249 阅读 · 0 评论 -
【题解】Codeforces514C. Watto and Mechanism 哈希
给定n,m(3e5)n,m(3e5)n,m(3e5),先给出nnn个文本串,再有mmm个查询串,对每个查询串询问:是否存在一个文本串,和查询串恰有一个字符不同。字符串总长不超过6e56e56e5.hash练手.采取hash定位+手动复查的方式,跑了1300ms/3000ms.如果单哈希不复查,会wa.一个可能的优化是,按长度给字符串分组,碰撞上会好一些。/* LittleFall ...原创 2019-11-13 12:06:28 · 203 阅读 · 0 评论 -
【题解】Codeforces126B. Password 前缀函数(KMP)
给一个字符串S(1e6)S(1e6)S(1e6),求它的一个最长的子串ttt,满足ttt既是SSS的前缀,又是SSS的后缀,又在一个既不是前缀又不是后缀的地方出现。如果没有这样的子串,输出Just a legend.性质很强,解法很多。比如求得前缀函数,然后从大到小遍历整个字符串的所有候选border,看有没有一个位置的前缀函数值等于这个候选border.(实际上从第二个开始一定有)....原创 2019-11-13 11:29:54 · 276 阅读 · 0 评论 -
【题解】Codeforces 961F. k-substring 后缀数组,枚举
给定字符串S(1e6)S(1e6)S(1e6),求所有中心子串的最大奇border长度,名词解释:中心子串:中心位置和原字符串中心位置相同的子串,即原字符串头尾去掉相同数量的字符后剩下的子串。border:最长的子串,既是真前缀,又是后缀。奇border:最长的奇数长度的子串,既是真前缀,又是后缀,不存在输出-1.设f[i]f[i]f[i]表示第iii个(iii从000开始)中心子串...原创 2019-11-12 22:16:34 · 209 阅读 · 0 评论 -
【题解】Codeforces 963D. Frequency of String AC自动机
给定字符串S(1e5)S(1e5)S(1e5),有q(1e5)q(1e5)q(1e5)个询问,每次给定一个整数kik_iki和字符串mim_imi。让你从SSS中选择一个子串TTT,且mim_imi在TTT中出现了至少kik_iki次。保证mim_imi的长度之和不超过1e51e51e5,保证所有的mim_imi不相同。这道题的关键在最后的两个保证上。使用AC自动机可以求得所......原创 2019-11-12 18:41:20 · 315 阅读 · 0 评论 -
【题解】Codeforces1037H. Security 后缀自动机,link树上启发式合并
给定一个字符串S(1e5)S(1e5)S(1e5),q(2e5)q(2e5)q(2e5)次询问,每次给出l,rl,rl,r和一个字符串xxx:要求找到s[l...r]s[l...r]s[l...r]的所有本质不同子串中第一个字典序大于xxx的(lower_bound),如果没有,输出−1-1−1.保证所有询问的xxx总长不超过2e52e52e5.对于字符串∣x∣|x|∣x∣,它的lower...原创 2019-11-12 04:32:13 · 219 阅读 · 0 评论 -
【题解】Codeforces 1141F. Same Sum Blocks 贪心,枚举
给一个长为n(1500)n(1500)n(1500)的数列a[i](±1e5)a[i](±1e5)a[i](±1e5),求最多能选出几个互不相交的子段,使它们的和相等,输出方案。只有n∗(n+1)/2n*(n+1)/2n∗(n+1)/2个区间,处理出全部的和,然后对于每个和的所有区间,求最大不重叠区间,按右端点排序的经典贪心。/* LittleFall : Hello! */#includ...原创 2019-11-12 00:46:03 · 181 阅读 · 0 评论 -
【笔记】ZKW线段树一:单点修改,区间查询
打了这么久比赛连线段树都不会就离谱参考资料 :线段树详解 (原理,实现与应用), CSDN,岩之痕《统计的力量》,清华大学,张昆玮今夜,我是ikun.简介zkw线段树是一种非递归的线段树,以常数小、代码短著称。单点加减,区间求和洛谷P3374 【模板】树状数组 1//zkw线段树,只能查询[1,m-2]的范围struct SGT{ ll save[M<<...原创 2019-11-10 02:46:32 · 368 阅读 · 0 评论 -
【题解】Codeforces1063F. String Journey 后缀数组+DP+线段树优化
对于一组字符串,如果后一个是前一个的真子串,就把它们称作是touristtouristtourist,它的ratingratingrating定义为字符串的数量。给定长为n(5e5)n(5e5)n(5e5)的字符串sss,在其中找到一个touristtouristtourist,满足所有字符串都是s的子串,前后两个字符串在不相交,且在sss中依次出现,求最大的ratingratingrating...原创 2019-11-09 05:02:20 · 232 阅读 · 0 评论 -
【题解】Codeforces1073G Yet Another LCP Problem 后缀数组+单调栈
给定n,q(2e5)n,q(2e5)n,q(2e5),和一个长为 nnn 的字符串 sss。qqq次询问,每次给定两个数组ai,bia_i,b_iai,bi。对于每次询问,输出ΣΣlcp(ai,bi)\Sigma\Sigma lcp(a_i,b_i)ΣΣlcp(ai,bi).保证所有询问的aaa和bbb数组长度之和不超过2e52e52e5.先写一个暴力。while(q--){...原创 2019-11-08 01:27:46 · 395 阅读 · 0 评论 -
【题解】2019NWRRC H. High Load Database 暴力,复杂度分析
给定长为n(2e5)n(2e5)n(2e5)的数字序列ai≥1,Σai≤1e6a_i\ge1, \Sigma a_i \le 1e6ai≥1,Σai≤1e6。q(1e5)q(1e5)q(1e5)次询问,每次询问给定一个ttt,问能把序列最少划分成多少个和不超过ttt的连续段,无解输出Impossible.Σai≤1e6\Sigma a_i\le 1e6Σai≤1e6是一个重要的条件,因...原创 2019-11-07 03:41:38 · 784 阅读 · 0 评论 -
【题解】2019NWRRC L. Lengths and Periods 后缀数组,按height枚举
给一个字符串www,求它的临界指数。找到 www 的一个子串 ttt ,它由它的一个前缀循环 α\alphaα 次构成。原创 2019-11-07 03:20:39 · 759 阅读 · 3 评论 -
【题解】Codeforces 1129C. Morse Code 后缀自动机,DP
在摩尔斯代码中,用长度不超过4的01串来表示大写字母。注意到大写字母只有26个,而21+22+23+24=302^1+2^2+2^3+2^4=3021+22+23+24=30,因为0011,0101,1110,11110011,0101,1110,11110011,0101,1110,1111不表示任何字母。现在有一个空串S,m(3000)m(3000)m(3000)次操作,每次往S的后面加一...原创 2019-11-07 02:11:11 · 239 阅读 · 0 评论 -
【题解】Codeforces1202E. You Are Given Some Strings... AC自动机,枚举拼串
给定长度不超过 2e52e52e5 的文本串 ttt 和 n(2e5)n(2e5)n(2e5) 个模式串 sis_isi,总长不超过2e52e52e5 .考虑n∗(n+1)/2n*(n+1)/2n∗(n+1)/2个模式串的拼接S=si+sjS=s_i+s_jS=si+sj,问所有的 SSS 在 ttt 中一共出现了多少次。ans=Σ(ed[i]∗st[i+1])ans = \Sigma...原创 2019-11-05 22:21:28 · 404 阅读 · 0 评论 -
【题解】Codeforces 1200E Compress Words 最长公共前后缀,KMP
n(1e5)n(1e5)n(1e5)个字符串,总长不超过1e61e61e6,每次把最前面的两个字符串按如下方法压缩成一个字符串,直到只剩下一个字符串:找到第一个字符串的一个后缀,与第二个字符串的一个前缀相同,且最长。删去一份,然后拼接起来。问题的关键在于第一个字符串的后缀可以匹配第二个字符串的最长前缀。如果将第二个字符串作为模式串,只要将它的前缀函数作用于第一个字符串就可以得到最长的匹配。...原创 2019-11-05 00:14:45 · 313 阅读 · 0 评论 -
【题解】2019CCPC哈尔滨L LRU Algorithm 哈希
LRU算法是指对于一个不断增长的数字序列aia_iai和一个窗口大小mmm,用窗口按出现顺序维护最新出现的mmm个不同元素。多组数据,现在给一个长为n(5000)n(5000)n(5000)的数字序列,以及q(2000)q(2000)q(2000)次询问。每次询问给定一个mim_imi和长为mim_imi的队列,问如果对大小为mmm的窗口执行LRU算法,是否有一个时刻窗口和给定的队列相等...原创 2019-11-03 23:16:34 · 1076 阅读 · 0 评论 -
【题解】2019CCPC哈尔滨B Binary Numbers 动态规划,二进制,状态设计
这场一共272个人,有三道金牌题,A(22/340),B(29/198),L(27/388)。做出任意两道就可以7题拿金,3道全出最高可以到第五名,不算打星第三名(渡渡鸟nb!)。训练赛中我花了不少时间想B题,临下场才有一些不成熟的思路。czq想出了L题但是写残了,整理一番之后我上去重写过了。tyx和czq想出了A题,tyx写炸了(捶地笑)。还要加油啊。交题链接:GYM102394B...原创 2019-11-03 22:57:47 · 1073 阅读 · 0 评论 -
【题解】洛谷P3705 [SDOI2017]新生舞会 01分规+费用流
给定一张n(100)∗2n(100)*2n(100)∗2个点的二分图,第iii个左侧点与第jjj个右侧点之间有两个属性:aij,bija_{ij},b_{ij}aij,bij.选择一种n条边的匹配方案,使得Σa/Σb\Sigma a/\Sigma bΣa/Σb最大套一层01分规的壳,二分查找F(x)=maxd{aij−xbij}F(x)=max_d\{a_{ij}-xb_{ij}\}F(...原创 2019-11-01 16:15:48 · 223 阅读 · 0 评论 -
【题解】洛谷P4322 [JSOI2016]最佳团体 01分数规划+树上背包
给定N(2500),K(2500),N+1个点的一棵树(以0为根),每个节点有属性Pi,SiP_i,S_iPi,Si。从树中选择K+1K+1K+1个点,使得ΣPi/ΣSi\Sigma P_i/\Sigma S_iΣPi/ΣSi最大,必须满足选择一个点时它的父节点也被选择。01分规:设最优解为x0x_0x0,那么ΣPi−x0ΣSi≤0\Sigma P_i-x_0\Sigma S_i...原创 2019-11-01 14:51:49 · 142 阅读 · 0 评论 -
【题解】HDU6040 Hints of sd0061 线性选择,STL
10组数据,给定n(1e7)n(1e7)n(1e7)和nnn个数,有m(100)m(100)m(100)次询问,每次问第bib_ibi小的数是谁。数组随机生成,且保证如果三个询问位置的大小不同,那么最大的那个一定大于等于剩下两个的和。从题目的数据保证里可以知道,给所有询问排序之后,每个询问要么和上一个询问相等,要么以bi≥bi−1+bi−2b_i\geq b_{i-1}+b_{i-2}bi...原创 2019-10-31 23:26:13 · 178 阅读 · 0 评论 -
【笔记】树上背包的复杂度分析
参考树上背包的上下界优化 ouuan洛谷P2014 选课给定n(300)n(300)n(300)门课的学分与先修课程(一个或零个),问选mmm个课程的最大学分。认为没有先修课程的课,以0为先修课程,且0课程的学分为0,以此构建一棵树。dp[i][j]dp[i][j]dp[i][j]表示以iii为根的子树中选修jjj门可以获得的最大学分。dp[i][j]=max{dp[v][j]+dp...原创 2019-10-30 22:10:49 · 2224 阅读 · 0 评论 -
【题解】洛谷P1273 有线电视网 树上背包
本题复杂度存疑给定n,m(3000),以及一棵n个节点、m个叶子的树。每条边有一个代价,每个叶子节点有一个价值。选择包含根的一棵子树,使得总价值大于等于总代价的前提下,原树中的叶子节点最多。dp[i][j]dp[i][j]dp[i][j]表示以iii为根的子树中添加jjj个叶子节点需要的最小净代价。dp[i][j]=min{dp[v][k]+dp[i][j−k]+cost[i][v]}...原创 2019-10-30 20:30:12 · 213 阅读 · 0 评论