Tricks
lamentropetion
---
展开
-
【前后缀技巧】2022牛客多校3 A
预处理出前缀lca和后缀lca,枚举哪个消失即可,可以统计方案数。这种是典中典中典,对于gcd,背包问题都是一样的处理方式。原创 2023-10-05 00:58:31 · 442 阅读 · 0 评论 -
【倒着考虑】CF Edu 21 D
这道题需要倒着步骤考虑,就是先去假设已经分为了两部分,这左右两部分的和相等,然后去想上一个步骤。原创 2023-09-03 18:13:20 · 219 阅读 · 0 评论 -
【动态map】牛客挑战赛67 B
在这里,定义{a,b}为cnt1 - cnt0和cnt2 - cnt0。可以先定义一个状态,然后用map统计前缀这个状态的出现次数。当cnt0 和 cnt1都和cnt2相同时,统计贡献。原创 2023-08-13 00:00:35 · 541 阅读 · 0 评论 -
【签到 前缀异或和】牛客多校2023 6E
因此需要满足 sum[r][cur[r]] - sum[l][cur[l]] >= k && cur[l] == cur[r]然后把这个结论推广,考虑两个区间 [l1,r1]和[r1+1,r2]合并的情形。因此cur[l1 - 1] == cur[r1] == cur[r2]然后,对于一个区间,区间和为偶数,就相当于区间内1的个数是偶数。对于第一个区间:cur[r1] == cur[l1 - 1]签到签了半天,思路和正解一模一样,但是经典不会调细节。对于第二个区间:cur[r2] == cur[r1]原创 2023-08-04 21:01:38 · 202 阅读 · 0 评论 -
【双指针优化DP】CF985E
但是平常写的分段DP都是n^2的,这里的可以发现单调性,因此考虑双指针转移。首先肯定需要排个序,然后分段DP。这里两个指针都代表两个段的右端点。原创 2023-07-28 10:57:08 · 128 阅读 · 0 评论 -
【算组合数】CF1833 F
观察一下样例可知,排序后我们可以双指针一下,然后方案数就是区间map之积。给定一个数列,让你在这个数列里找一个大小为M的子集,使得极差不超过M。子集,不是子序列,说明和顺序无关,因此可以考虑排序。原创 2023-07-23 21:52:55 · 235 阅读 · 0 评论 -
【MEX】CF1629 C
可以发现做法是对该数列进行分段,当当前mex在后缀没有出现过时,形成一个区间[l,r]对于第一个,直接用set维护集合中出现过的数是哪几个。2.怎么看mex在后缀有没有出现过。第二个问题只需要用桶记录一下即可。1.mex怎么去维护。原创 2023-07-13 17:42:05 · 303 阅读 · 0 评论 -
【二分图+数据范围】牛客练习赛 E 奇环
【代码】【二分图+数据范围】牛客练习赛 E 奇环。原创 2023-07-11 14:19:20 · 176 阅读 · 0 评论 -
【二维属性+贪心+双指针】Wannafly 挑战赛15 A
值得注意的是,我们说的双指针的单调性,指的是 j 指针前面所有元素都能满足 ai 以及 ai 以后这个条件。还是一样双指针把可行解放入DS中,然后求最优解。经典中的经典中的经典。原创 2023-07-06 17:55:00 · 95 阅读 · 0 评论 -
ABC 195 C
不知道该怎么解释这道题,反正我不太会,感觉很帅。原创 2023-07-06 00:26:51 · 241 阅读 · 0 评论 -
【二维属性+贪心+双指针】ABC 195 D
经典中的经典,二维属性,对于其中的一个关键字排序,然后双指针将合法的可行解放入容器中,再去容器中找最优解,用双指针是因为它具有单调性。这里的最优解就是找出体积第一个>=它的,然后匹配。原创 2023-07-06 00:26:06 · 206 阅读 · 0 评论 -
【二维偏序+双指针】ABC245 E
这类双指针可以概括为:对于枚举的量(i),将合法解放入容器中,再在容器(合法解空间)中找最优解(这里可以贪心),满足的条件通常是二维偏序,一维来保证合法性,另一维来贪心获得最优解。对于这道题,我们可以以长度来check合法性,然后在合法解空间中找出最合适的,即找出第一个宽度>=物品的宽度的盒子,这个可以lower_bound来解决。在选盒子的过程中,注意到 j 具有单调性,因此我们可以双指针。因为两个数组都是无序的,因此可以考虑给这两个数组都排个序。我们可以先去枚举物品,然后去选对应的盒子。原创 2023-07-04 13:32:52 · 85 阅读 · 0 评论 -
【贪心+双指针】ABC308 F
对于每个物品,我们把合法的券扔进优先队列中,找到d最大的即可。注意到可以选的券具有单调性,可以用双指针维护。贪心结论就是,每次选合法的券中优惠最大的。因此我们可以把物品和券都排序。合法指本身的价格够上L值。原创 2023-07-02 17:58:04 · 119 阅读 · 0 评论 -
【贪心+双指针】阿宁睡大觉
那就是很经典的while(1)型的双指针了,很重要的一点是:要去掉前缀0区间和后缀0区间,这两个区间不能算进贡献里。首先有个很明显的结论:去掉2贡献要不变小要不不变,因此一定是去掉0。那么就是贪心,将连续0的区间长度排序,然后计算贡献。原创 2023-06-17 23:15:01 · 47 阅读 · 0 评论 -
【sorting+并查集】代码源每日一题div2 psort
这道题中,用并查集染色,建完图之后,只需要去判一个连通块里的元素是不是恰好是那几个不同位置的元素即可。固定距离交换元素,用并查集即可。原创 2023-06-15 17:23:34 · 46 阅读 · 0 评论 -
一类trick【鸽巢原理】
同样的道理,可以给后缀和模2019,如果两个位置模2019的结果相同,那么中间那个数就一定是2019的倍数,所以可以直接map计数。如果两个位置的前缀和模N的结果相同,那么这两个位置之间的那个数模N就是0。给序列做个前缀和,同时模上N。原创 2023-06-11 10:14:55 · 31 阅读 · 0 评论 -
【状态设计优化DP】代码源每日一题div1 等差数列
设dp[i][j]为等差数列最后两项为aj,ai的最大长度,枚举ai,双指针j,k,当满足2*ai==aj+ak时转移。所以一开始设了个二维的DP,设dp[i][j]为,以ai结尾的,等差数列上一个元素为aj的最大长度。又想了一个dp[i][j]表示以ai结尾的,公差为j的等差数列的最大长度,但是这样存不下。注意到这是个三元组,所以很容易想到去枚举中间那个元素。因为是个等差数列,满足2*ai==aj+ak。一看这数据范围,就是个N^2的DP。但是这样的转移是N^3的,不行。总之,常规做法都不行。原创 2023-06-08 10:18:03 · 82 阅读 · 0 评论 -
【枚举+DS】CF1831D
题意:思路:原创 2023-05-29 20:44:07 · 53 阅读 · 0 评论 -
【二进制枚举+双指针】CF828div2 C. Flexible String
【代码】【二进制枚举+双指针】CF828div2 C. Flexible String。原创 2023-05-18 23:46:08 · 47 阅读 · 0 评论 -
【枚举+sorting+递推(DS思想)】 ABC186 D - Sum of difference
然后注意到相邻两个数的贡献是可以递推的,比较相邻两个数的贡献即可。因为算的是所有对的贡献,因此数列是无序的。O(n^2)超时,肯定是O(n)算。因此可以把数列排个序。原创 2023-05-17 12:39:58 · 47 阅读 · 0 评论 -
【差分】CF862div2 C
【代码】【差分】CF862div2 C。原创 2023-05-16 08:31:40 · 46 阅读 · 0 评论 -
【排列+sorting】CF873div2 B
显然k应该是每一个pi-i的因子,那就是求一求gcd就可以了。一个排列能通过这种交换进行排序的充要条件就是。这道题显然输入都满足这个条件,问的是最大的k。对于排列的sort,最终状态就是1~N。对于所有元素都满足i%k==pi%k。那么一个连通块的id就是i%k。设可以交换的距离为k。原创 2023-05-15 21:40:03 · 31 阅读 · 0 评论 -
【sorting+双指针+数学】CF845div2 C. Quiz Master
一开始想的也是排序,然后双指针,但是我想的双指针是l=1,r=n的,因为我没注意到。其实就是尺取法,然后合法性就是这个区间内的数的所有因子能填满1~m这些格子。和我一开始想的不太一样。原创 2023-05-11 23:03:23 · 135 阅读 · 0 评论 -
【sorting+暴力】CF624div3 C. Perform the Combo
给定一个字符串s和一个数列a,遍历数列a,每次操作都会给字符串前缀的前ai个的元素出现次数++,问你所有操作过后的字符出现次数。注意到操作前后顺序不会变化,且注意到每次回溯是O(n^2)复杂度,因此考虑将a数组sort一下。然后每次操作就相当于前缀这么多字符次数+=前缀这些字符的出现次数 和 新的字符出现次数++排序之后就能用DS维护答案了(有点像莫队?所以还要维护每个字符出现次数的前缀和。原创 2023-05-09 14:19:32 · 36 阅读 · 0 评论 -
【打表+数学】CF729div2 C. Strange Function
于是我们可以先打表,对于k:143,求出1k-1的最小公倍数,如果数x想要有calc[k]的贡献,那么它一定是calc[k]的倍数,我们可以通过x/calc[k]得到x中包含calc[k]的倍数的个数,其个数便是在原有基础上再+1的贡献值,最后相加即可。然后就可以开始猜了,首先明确每个i的贡献最少为2,然后对于2的倍数,那么2就不可取,贡献加1,对于6的倍数,3不可取,贡献再加1,对于12的倍数,4不可取,贡献再加1,以此类推……规律一目了然,但是我不会算贡献....对于每一个x,其贡献最少为2。原创 2023-05-08 18:04:56 · 54 阅读 · 0 评论 -
【sorting】CF861div2 B. Playing in a Casino
注意到列与列之间的贡献互不影响,因此可以考虑对于每一列都去sort一遍,然后只枚举一个指针,直接算贡献。对每一列都sort,可以开一个vector存一下。枚举超时-->只枚举一个指针,然后直接算贡献。原创 2023-05-04 10:22:44 · 58 阅读 · 0 评论 -
【sorting】CF855div3 2. Unforgivable Curse (hard version)
给你两个长度为n的只有英文的字符串a,b,然后给你一个k,你可以使si和s(i+k)或者si和s(i+k+1)交换,问你能否通过任意次交换,使得a,b字符串相等。这种定长交换有个套路,就是%K的位置都是在同一个连通块里的,因此直接并查集就行。原创 2023-05-04 00:14:10 · 78 阅读 · 0 评论 -
【sorting】CF868div2 B. Sort with Step
【代码】【sorting】CF868div2 B. Sort with Step。原创 2023-05-04 00:02:05 · 48 阅读 · 0 评论 -
【双指针】ABC229 D - Longest X
因为一个合法的区间的.的个数必须<=k,因此直接考虑双指针即可。原创 2023-05-01 13:45:59 · 96 阅读 · 0 评论 -
对顶堆模板!!【DS对顶堆】ABC281 E - Least Elements
考虑每过去一格,用DS维护前k个元素和sum。每过去一格,删去a[i],添加a[i+m]具体用什么DS呢,取决于我们需要维护什么。我们需要动态维护前k个元素和sum。原创 2023-04-28 23:32:09 · 879 阅读 · 0 评论 -
【神秘题 整数溢出】牛客小白月赛71 C-猫猫与数列
值得注意的是,他在算数列的过程中可能会爆long long,因此在算的时候注意开__int128,这样就算爆long long也能和1e18比较。__int128可以四则运算,但是不能输入输出,因此要专门写一个函数实现输入输出。原创 2023-04-25 15:53:48 · 117 阅读 · 0 评论 -
【哈希】ABC248 D - Range Count Query
那么每次询问之间二分出第一个>=L的和最后一个<=R的位置,就可以计算贡献了!考虑值域的那根数轴,值域中的每个数都插入位置。但是有个特殊条件:ai的值域在1~N之间。本来一点思路都没,只会暴力。原创 2023-04-24 10:36:37 · 40 阅读 · 0 评论 -
【二分/双指针】ABC250 D - 250-like Number
枚举p的位置,双指针q的位置即可。原创 2023-04-13 11:33:23 · 82 阅读 · 0 评论 -
ABC247 E - Max Min
s b二分调 n m半天调不出来。原创 2023-04-12 11:15:54 · 53 阅读 · 0 评论 -
【滑动窗口】ABC267 C - Index × A(Continuous ver.)
答案要求的是一个区间内1*ai+2*a(i+1)+....,所以我们考虑暴力维护这个区间的这个值。其中波浪线部分直接可以维护区间和,然后左边少的那个和右边多的那个直接在移动窗口的时候维护就行。虽然是简单题,但是这就是DS的含金量!所以我们需要维护变化的这个部分。原创 2023-04-11 15:58:32 · 76 阅读 · 0 评论 -
ABC246 D - 2-variable Function
这道题可以用双指针,从小到大枚举a,从大到小枚举b,因为r只会变小,因此只扫一遍,复杂度是n的开三次方,即1e6。看到三次方,n的范围又是1e18,因此a,b的范围就是1e6,因此可以去枚举a或b其中一个。很重要的一点就是,看到代数式要很自然地去推导数据范围。原创 2023-04-07 10:38:49 · 235 阅读 · 0 评论 -
ABC252 D - Distinct Trio
对于一个三元组,我们去枚举中间那个元素最好,然后比它小的元素和比它大的元素的多少都通过前缀和求出来了。注意到值域很小,我们可以用值域的前缀和来维护全局哈希,即用前缀和来维护多少数比x小,比x大。原创 2023-04-06 23:28:07 · 291 阅读 · 0 评论 -
【尺取法】Sum of Consecutive Prime Numbers
尺取法原创 2023-03-26 22:34:30 · 88 阅读 · 0 评论 -
ABC295 D - Three Days Ago
异或前缀和原创 2023-03-25 23:52:02 · 154 阅读 · 0 评论 -
【板子】分块解决线段树问题
分块原创 2023-03-21 15:54:01 · 68 阅读 · 0 评论