前缀和
小菜鸡加油
菜鸡
什么都能折磨
展开
-
C. Portal(dp优化二维前缀和)
https://codeforces.com/contest/1581/problem/C正常的第一想法是:二维前缀和预处理+暴力。但是n是400过不去。之前碰到一道利用最大子序和思想来优化的。这题类似。采用dp来优化。枚举两行 ,再枚举1列。对列进行dp。dp[k]:当前到k列的最小花费(注意这里是不包含第k列的)【后面解释】f[k]=min(f[k−1]+加入第k行需要的修改次数,以i、j、k−3、k为边界的矩阵的修改次数)每次用当前的f[k]+右边界需要的修改次数更新ans。先解原创 2021-10-30 18:51:49 · 219 阅读 · 0 评论 -
5865. 访问完所有房间的第一天(CF1552F)
类似题目:https://codeforces.com/contest/1552/problem/F题目有个很重要的条件,就是跳回去的日期只会是前面的。所以到了i位置的时候,前面的位置都是偶数次访问。此时回去,i位置奇数次访问,然后下一步要到达i+1位置的时候,需要快速获得回到i位置的步数。然后到i+1的位置,此时i+1的位置访问次数也是奇数次,因此就是类似刚才的重复状态。定义:dp[i]:第一次到达i位置的需要天数(注意是天数不是第几天)g[i]:到达i位置时候变成了奇数次然后返回到原创 2021-09-05 16:02:07 · 116 阅读 · 0 评论 -
E. Funny Game(博弈类dp+前缀和倒序)
1.要观察到整体式子的总和是不会发生变化的。因为每次拿掉后又把该一段的和放回去。因此可以前缀和处理2.发现第一次取最后一个位置直接结束游戏,第二次取前面的一些位置后,如果知道该位置后面的最优解,就可以直接转移。提示发现是倒序处理。即dp[i]的解可以由dp[i+1]更新过来dp[i]:Alice取/不取i位置获得的最终的最大差值.3.对于Alice的dp[i]的最大差值,那么如果Alice取i了,dp[i+1]是Alice在[i+1,n)的最大差值。Bob很聪明,所以直接沿用这个结果就可以(因为这个结原创 2021-08-17 00:06:29 · 115 阅读 · 0 评论 -
问题 B: 手套(原题:无限手套) (dp+两重前缀优化/生成函数)
https://ac.nowcoder.com/acm/contest/186/D思路:比赛的时候第一眼生成函数不会。赛后学弟说可以dp设dp[i][j]表示前i个,选了j个宝石的代价和。考虑对当前取k个,可以得出一个暴力的dp。先放上学弟的暴力dp理理#include<bits/stdc++.h>using namespace std;long long i,j,m,n,s,t,x,y,z,k;long long a[1010][10010],b[10010];原创 2021-05-11 09:44:50 · 357 阅读 · 1 评论 -
B - New Year and Ascent Sequence(思维+细节!)
https://codeforces.com/contest/1284/problem/B思路:换到值上去..开始跑了个树状数组发现样例3怎么都不对..现在也不知道为啥..然后改成前缀一直wa9..不知道哪里的边界问题..然后都+1就过了(总之最近心态各种炸裂+水逆#include<iostream>#include<vector>#include<queue>#include<cstring>#include<原创 2021-04-16 10:57:58 · 110 阅读 · 0 评论 -
D. White Lines(思维+二维差分)
https://codeforces.com/problemset/problem/1200/D思路:暴力N^4了都对于每一行,处理出其最左最右黑块,这样就可以算出,有一块区域擦掉,是可以把这一行变成全白的。于是把每一行能让其变白的区域全部++,每一列变白的区域++。这样一来答案就是++块最大的那个点。注意让二维的一块区域整体+1,就是二维差分了。对差分扫一遍前缀和就是当前数组了。#include<iostream>#include<vector>#原创 2021-04-13 20:49:16 · 166 阅读 · 0 评论 -
1175D - Array Splitting(思维+后缀和)
https://codeforces.com/problemset/problem/1175/D思路:看到第一眼,dp..第二反应,这复杂度能优化的?一搜发现是个trick来源https://blog.csdn.net/weixin_43819762/article/details/109148973?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242原创 2021-04-06 19:54:57 · 76 阅读 · 0 评论 -
1313C2 - Skyscrapers (hard version)(思维+单调栈+前缀和)
https://codeforces.com/problemset/problem/1313/C2思路:可以发现答案是某点做最高峰的开口向下的二次函数。对于一个点,如果其左边存在能比他大的数,那么就可以拉平,如果比其下,那么就要更新最大值。于是对于每一个数,我们要快速找到其最近的比他小的数。也就是维护某个数作为最大值的区间范围。那么就是单调栈。维护好之后就可以跑前缀和左边的贡献值:左边第一个小于等于他的点的pre[l[i]]+m[i]*这两点之间的距离。右边的贡献值:右边第一个小于等原创 2021-04-05 00:10:25 · 150 阅读 · 0 评论 -
808D - Array Division(思维)
https://codeforces.com/problemset/problem/808/D思路:这题怎么会在1900的定位=,=答案肯定是偶数,拿一个变量统计前缀和,如果不够一半就map找后面的有无这个差值,超过了一半就看前面的有无这个多余。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include原创 2021-04-03 16:33:54 · 143 阅读 · 0 评论 -
B - Products of Min-Max (思维+幂次函数递推)
https://atcoder.jp/contests/arc116/tasks/arc116_b思路:第一眼n^2,然后往贡献法想..gg。正解是在幂次函数这里有个递推。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#in原创 2021-03-28 23:50:39 · 252 阅读 · 0 评论 -
1041D - Glider(思维+二分+前缀和)
https://codeforces.com/problemset/problem/1041/D思路:可以发现,选择的起点在当前某个线段区间的左端点一定不会更差。于是On枚举起点位置,快速找到其终点在的区间。下降的过程满足单调性,于是二分最终所在的区间。中间的check用前缀和处理区间的差值的累加就可以O1check了。#include<iostream>#include<vector>#include<queue>#include<cstr原创 2021-03-27 15:45:49 · 123 阅读 · 0 评论 -
1132C - Painting the Fence(思维+差分)
https://codeforces.com/problemset/problem/1132/C思路:可以发现n^2枚举。对于去除第一个人后序列的状态,可以O1用差分修改出来。然后On累加。去除第二个人后序列的答案怎么算。可以发现去除第二个人后对其所在的[l,r]区间内还剩涂了一次的状态去除掉就好了。所以前缀和统计一下只有一个覆盖情况的。差分维护好扫一遍处理好前缀,然后On枚举。#include<iostream>#include<vector>#inclu原创 2021-03-25 11:03:08 · 94 阅读 · 0 评论 -
E. Binary Numbers AND Sum(思维+前缀)
https://codeforces.com/problemset/problem/1066/E思路:下串往右移的过程中可以算出下串的每一位的1和上串的1&产生的贡献,可以On跑出上串的一个前缀和,累加过来就是答案了。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<deque>原创 2021-03-24 22:18:57 · 289 阅读 · 0 评论 -
CF578B “Or“ Game(思维+贪心+前缀或)
https://codeforces.com/problemset/problem/578/B思路:每次乘2在二进制里意味着该数至少能左移一位,对应高位贪心,我们把k次都集中到一个数上,然后考虑怎么求得其中一个数字改后的整个序列的答案。或满足前缀性质,二进制|不会变少。于是前缀或后缀或就好#include<iostream>#include<vector>#include<queue>#include<cstring>#include&l原创 2021-03-24 21:39:04 · 101 阅读 · 0 评论 -
D. Extra Element(思维+map)
https://codeforces.com/problemset/problem/1185/D思路:考虑去掉一个数后序列里面差分的情况有多少个不同的数字。开始用multiset,但是常数太大,8*logn*logn,哪怕去掉了一些卡multiset的情况仍然tle41#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath&原创 2021-03-10 16:04:30 · 127 阅读 · 0 评论 -
D. Yet Another Monster Killing Problem(思维+二分细节+贪心+前缀)
https://codeforces.com/problemset/problem/1257/D思路:贪心,先将每个hero按照攻击从小到大排,相同的就按耐力持久。于是On扫一遍怪物序列,对于当前i这个怪物,对hero数组中二分出第一个大于等于这个怪物的英雄位置,然后快速找到这里面的最持久的英雄。判断能否打败这个怪物。直到怪物序列够长了得换英雄。快速找最持久的来一个后缀最大预处理就好。细节:每次找的时候要更新当前怪物,且更新的是其连续长度的最大值。如果新开了一个怪物注意更改的值。原创 2021-03-04 17:40:19 · 290 阅读 · 3 评论 -
D. Zookeeper and The Infinite Zoo(位运算+规律)
https://codeforces.com/contest/1491/problem/D题意:有一个序列1,2,3,……,正无穷。u可以到u+v当且仅当u&v=v。有q个查询,每个查询给出两个点u和v,问u是否能到v。思路:打个小范围的表找一下规律.011-->101;011-->110;011-->100110-->1000;110---->1010;110--->1100;110 X-->111;可以发现,1的数量不会变多,原创 2021-03-02 10:50:56 · 358 阅读 · 0 评论 -
F. 生命(菱形转矩阵+二维前缀和)
思路:模拟发现是菱形,转化到矩形,然后跑矩形的二位前缀和#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio>#include<algorithm>#define debug(a) c..原创 2021-02-28 15:41:44 · 199 阅读 · 0 评论 -
C. Berry Jam(思维+差值前缀和+map预处理)
https://codeforces.com/problemset/problem/1278/C思路:由数量相等转化成一正一负和为0.然后用前缀处理其和值.并且map处理一半区间的和值出现的最优位置。最后再枚举另一半,找出其后缀与map对应位置的差。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#inc原创 2021-02-23 16:06:44 · 165 阅读 · 0 评论 -
D. Program(思维+预处理前后缀最值/st/线段树)
https://codeforces.com/problemset/problem/1473/D给定一个长度为n的指令序列和初始变量x=0,仅包含+和−+表示让变量x+1,−表示让变量x−1然后进行m次操作,每次操作指令一个指令区间[l,r]忽略执行这个区间内的指令,其他指令照旧依次执行,输出每次操作后x的不同的数的个数。 例如+-- 变量x变成1,0,-1也就是有3中不同的变化。思路:连续值域波峰波谷的经过数字种类取决于最大值与最小值的差.也就是我们知道[1,l-1]和[r+1原创 2021-02-21 23:56:57 · 211 阅读 · 0 评论 -
C. Ladder(思维+最值区间前缀)
https://codeforces.com/contest/279/problem/C题意:给一个数列,查询区间[l,r]内是否存在b1 ≤ b2 ≤ ... ≤ bx ≥ bx + 1 ≥ bx + 2... ≥ bk或是非递增、非递减序列思路:按照波峰的状态,预处理出每个点能往右达到的最远点/长度,每个点能往左达到的最远点/长度。然后判[l,r]的区间长度是否满足r[l]+l[r]#include<iostream>#include<vector>.原创 2021-02-18 16:00:00 · 219 阅读 · 0 评论 -
F. Equalize the Array(思维+前缀和)
https://codeforces.com/contest/1490/problem/F题意:问最小删除多少个数字使得剩下的数字出现次数都一样。思路:开始就是暴力枚举剩下一个次数,这样肯定要用一些东西优化。预处理一下某个次数有多少个种类的数字出现过。然后枚举的时候就可以O1删除。在枚举的次数后面的数由于次数比他多,不能全删。转化一下,先全删除,再加上多删除的。多删除的预处理一下某个次数有几个种类的数的后缀。#include<iostream>#include<ve原创 2021-02-17 12:36:38 · 2622 阅读 · 5 评论 -
B. Replace and Keep Sorted(思维+前缀和)
https://codeforces.com/contest/1485/problem/B思路:有点有趣的题.abcd,a是从1~b-1选取,b是从a~c选取,c是b~d,d是c+1 ~k对于[l,r]范围以内的,最左边的l这个数字可以在a[l+1]-2的范围内任取(除了a)。最右边的r这个数字可以在a[r-1]~k中任取(除了d)剩下的在中间考虑前缀和。和平时稍微有点不一样的是这里是sum[r-1]-sum[l];前缀和的更新是sum[i]=sum[i...原创 2021-02-13 11:58:21 · 1472 阅读 · 4 评论 -
E2. Three Blocks Palindrome (hard version)[思维+贡献法+前缀和)
https://codeforces.com/contest/1335/problem/E2思路:easy版本的枚举[l,r]的区间然后前缀和预处理好后暴力做。hard版本的n是2e5.这里的ai比较小。考虑ai。对于每一个ai,我们可以预处理出他所在的位置分布情况。然后对于每一个ai,我们枚举其第一个位置和最后一个位置作为左段和右段的情况,中间用一个前缀和o(200,得出一个结果。再枚举其第二个位置和倒数第二个位置去枚举。最后得出一个最值。统计位置用vector开个桶就好了,卡空间原创 2021-02-09 15:35:00 · 174 阅读 · 0 评论 -
D. Cleaning the Phone(枚举+前缀和+二分)
https://codeforces.com/contest/1475/problem/D经典两个物品状态的总最优题:#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio>#include<a原创 2021-01-31 22:51:41 · 324 阅读 · 0 评论 -
C. Sonya and Robots(思维+后缀)
思路:刚开始觉得统计后缀稍微有点麻烦..然后想着一次扫出来。虽然可以但是感觉容易重合漏-.-所以后来还是改成后缀了。先预处理一个后缀不重复数字的后缀和。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio.原创 2021-01-25 14:34:15 · 126 阅读 · 0 评论 -
C. 赛车(思维+贪心)
虽然是个签到,但是这个题出的挺好的。思路:首先可以看到和顺序无关,所以sort。sort完之后序列如下: 原本分数 a1 a2 a3 a4 a5 a6 a7 增加分数: 7 6 5 4 3 2 1想要让a1最大,就让a1+7,同时由于序列是单增的,贪心让增加分数递减。如果这时候后面存在总分比他还大的,那么他永远不会是总冠军。那到了a4呢?我们同样贪心让a4+7,注意是加7.这时候要a4前面的数比a4小,加的分数比a4小,自然不用考虑。要让a4后面的数尽...原创 2021-01-22 12:26:56 · 149 阅读 · 0 评论 -
A. 打印收费(思维+二分+后缀最小/st/线段树)
思路:首先找到一个最近的小于等于当前纸张的价格,然后找一个办法快速统计后面的价格中最小值就好了。感觉这题cf出过阿。找到位置,由于存在单调性,采用二分即可。要注意一下二分找不到的位置。比较推荐的常数小的是思维的维护后缀最小值。献上我池巨的代码:维护后缀最小值O(1)查询比较即可。讲一下其他方法,维护一段序列的最小值并查询,可以st表可以线段树,试了一下st表。但是二分卡了边界。(这就去更一下二分的文章)原来wa了8发的原因:找不到的时候l=n+1;虽然取了边界,l--,...原创 2021-01-20 22:27:42 · 100 阅读 · 1 评论 -
D. Cleaning(思维好题+前缀)
https://codeforces.com/contest/1474/problem/D题意:n个数,现在你可以取出相邻的都不为0的数,使得他们同时减1,如果一个堆为0了,它并不会消失掉,此时我们有至多一次机会操作,交换相邻两个数的位置,问能不能使得全部的数都变为0.思路:首先发现,端点一定要<=后面的值,不然肯定不成立。于是a2>=a1,减了之后a2=a2-a1;此时a2变成端点,同理可知a3>=此时的a2才能成立.那么对于从尾巴开始也是这个道理。那么中间的过程用一原创 2021-01-20 12:53:22 · 2028 阅读 · 6 评论 -
D. XOR-gun(思维+前缀异或+暴力)
https://codeforces.com/contest/1457/problem/D话说这场D吃完饭hack了400+人。思路:开始看到以为答案只有-1,1,2三种,但是并不是。构造发现如果连续三位的最高位1位置一样,那么就能1次达到目的。那么这种情况下的极限是什么呢?00010010001101??01??1???1???可以看到,在最大值1e9的情况下,当序列里刚好不冲突的时候,有60个数字。剩下进去就必然可以1次。那么题目就剪枝到60以下了。原创 2020-11-30 20:39:02 · 419 阅读 · 0 评论 -
C. k-Amazing Numbers(思维前缀最小值+枚举相同数距离)
https://codeforces.com/contest/1417/problem/C大晚上的想岔了..a1,a2,…,an(1≤ai≤n)这个范围其实就在暗示要枚举出现的数。但是我不知道怎么恍惚看成1e9..对于每个数,实际上就是考虑相同数之间最少需要多长的k才能都包含到。枚举一个数和序列开头,中间数之间的差,最后一个数和序列结尾。用一个ans[k]记录最少需要长度的k中最小的数字是哪个。ans[k]=min(ans[k],i);最后注意还要维护一下ans[k]的前缀最小。因为长度为.原创 2020-09-28 17:55:59 · 1023 阅读 · 2 评论 -
划分(思维+前缀和)
链接:https://ac.nowcoder.com/acm/contest/7329/B来源:牛客网题目描述给你一个长度为 n的序列,第 i个数为aia_iai将这个序列分割成 i个不重合的子串,从每个子串中取出最大的 j 个数作为这个分割方法的价值,记价值最大的分割方法的价值为val(i,j)但是金发少女 DK 觉得这太好算了,于是她要你求下面的柿子 ∑i=1x∑j=1yv...原创 2020-09-12 12:57:49 · 171 阅读 · 0 评论 -
E. Two Platforms
https://codeforces.com/contest/1409/problem/E思路:开始自己想前缀和预处理,找一段长度-2*k的最小和,然后想到这个可以是不连续的。所以直接处理两个板子。先考虑枚举,以当前位为板子起点,往右最多能到(pos)多少(由于单调的,所以二分可以,尺取法去找也可以)。这时候第二个板子应该放哪呢?放从Pos+1开始?还是pos+2...?这里就又有一个枚举的过程了。应该放后缀最大的点。所以先预处理pre[i],处理完后预处理suf_max[i]=max(suf_ma原创 2020-09-05 16:31:01 · 372 阅读 · 0 评论 -
C. Molly‘s Chemicals
https://codeforces.com/problemset/problem/776/CMolly Hooper hasndifferent kinds of chemicals arranged in a line. Each of the chemicals has an affection value, Thei-th of them has affection valueai.Molly wants Sherlock to fall in love with her. She...原创 2020-09-02 10:49:44 · 231 阅读 · 0 评论 -
C. Vus the Cossack and Strings
https://codeforces.com/problemset/problem/1186/C题目描述Vus the Cossack has two binary strings, that is, strings that consist only of "0" and "1". We call these stringsaaandbb. It is known that|b| \leq |a|∣b∣≤∣a∣, that is, the length ofbbis at most...原创 2020-09-01 17:16:44 · 191 阅读 · 0 评论 -
Little Elephant and Array(前缀和)
https://codeforces.com/problemset/problem/220/B展开题目描述The Little Elephant loves playing with arrays. He has arrayaa, consisting ofnnpositive integers, indexed from 1 tonn. Let's denote the number with indexiiasa_{i}ai.Additionally the Li...原创 2020-08-30 21:52:48 · 164 阅读 · 0 评论 -
牛牛的算术(公式推导)
链接:https://ac.nowcoder.com/acm/contest/7079/B来源:牛客网时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld题目描述牛牛最近学习了取模是什么 于是他看到了下面这一道题:多次询问:每次询问包含一个正整数 nnn要求你输出下列结果∏i=1n∑j=1i∑k=1ji×j×k\prod_{i=1}^n \sum_{j=1}^i \sum_{k=1}^j ..原创 2020-08-29 23:37:20 · 4055 阅读 · 1 评论 -
P1083 借教室
https://www.luogu.com.cn/problem/P1083题目描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来nn天的借教室信息,其中第ii天学校有r_iri个教室可供租借。共有mm份订单,每份订单用三个正整数描述,分别为d_j,s_j,t_jdj,sj,tj,表示某租借者需要从第s_原创 2020-07-12 10:50:27 · 297 阅读 · 0 评论 -
CODEFORCES ROUND #645 (DIV. 2)
http://www.yyycode.cn/index.php/2020/05/30/codeforces-round-645-div-2/A. Park Lightingtimelimit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputDue to the coronavirus pandemic, city authorities obligated .原创 2020-05-30 20:32:10 · 407 阅读 · 0 评论 -
B. LECTURE SLEEP
http://www.yyycode.cn/index.php/2020/05/20/b-lecture-sleep/Your friend Mishka and you attend a calculus lecture. Lecture lastsnminutes. Lecturer tellsaitheorems during thei-th minute.Mishka is really interested in calculus, though it is so har...原创 2020-05-20 16:26:33 · 250 阅读 · 0 评论