
前缀和、差分
前缀和、差分
璇玑你没有心
这个作者很懒,什么都没留下…
展开
-
[NOIP2013]积木大赛 [NOIP2018]道路铺设 贪心/差分
积木大赛原题链接:登录—专业IT笔试面试备考平台_牛客网 AC代码:道路铺设登录—专业IT笔试面试备考平台_牛客网 AC代码:一样的思路,可以自己写一下~原创 2022-06-23 11:05:49 · 533 阅读 · 1 评论 -
C. Helping the Nature(cf)差分
题目大意:给你一个数组a,其中每个数的范围是−1e9≤ai≤1e9,每一次操作可以在以下操作中选择:1)把a1 ... ai所有数减一2) 把ai ... an所有数减一3)把a1...an整个数组中所有数加一问你最少操作次数使得整个数组中每个元素都为0?...原创 2022-06-20 16:03:07 · 569 阅读 · 0 评论 -
C. Vasya and String(cf)前缀和 + 二分答案
原题链接:Problem - 676C - Codeforces题目大意:给你一串字符串,只包含a和b两个小写字母。子串的长度是n,然后给了你一个数k,这是你能改变字母的最大个数,然后求改变后能获得的最大连续子串长度是多少。思路:1.这个题可以用二分来做,二分最大长度,然后每次判断在这个最大长度之下连续子串能不能由改变至多k个字母获得;2.这里可以用到前缀和做预处理,把a出现的地方看成1,b看成0,那么选定了一个最大子串长度x,就顺序查找每一个这样长度子串中,把所有字母变成a或b能不能在k原创 2022-03-04 00:07:49 · 234 阅读 · 0 评论 -
C. Sweets Eating(cf)dp
原题链接:Problem - 1253C - Codeforces题目大意: 糖果每天最多吃m个,一共n个糖果。糖果第d天吃的花费是a[i] * d 问你吃k块糖果的最小花费是多少。思路:先把每颗糖果的a[i]排序,例如1 2 3 4 5..比如m为3,一天最多吃三颗糖。那么如果要吃1颗糖,当然选择最少的,而且在第一天吃,花费就是1;如果2颗,2 <= 3,都在第一天吃,所以1 + 2 = 3..如果4颗,肯定让4 3 2在第一天吃,1 在第二天吃,那么答案就是4 +3 + 2 + 1 * .原创 2022-03-02 17:07:27 · 197 阅读 · 0 评论 -
C-蓝慧星(牛客) 差分 前缀和
原题链接:登录—专业IT笔试面试备考平台_牛客网彗星出现的持续时间,就像是一个区间。我们可以以时间为下标,由题目范围,我们知道时间最多是2 * 100000即2e5,所以我们可以开两个2e5 + 10的数组,下标表示时间,用两个差分数组进行操作,直接在一个区间两端进行加减。然后再将两个数组分别a[i] += a[i - 1], b[i] += b[i - 1],就得到时间为i时刻蓝、红彗星分别的数量。如果某一时刻蓝彗星数量大于0,即存在蓝彗星,且红彗星数量为0,表明这一时刻符合要求,即可.原创 2022-02-20 15:44:39 · 393 阅读 · 0 评论 -
D. Say No to Palindromes (cf) 前缀和
原题链接:Problem - 1555D - Codeforces给你一串字符串,只由abc三个字母构成,告诉你字符串总长n, 需要查询次数m。给你m行,每行两个数字l,r(下标从1开始),让你找到这个区间上改变最小的字母个数使得这个区间上没有回文子串。分析一下,要使一个字符串中没有子串是回文串,如果第一个字母是a,那么第二个子母可以选择b或c。如果第二个字母选b,那么第三个字母就不可能是a也不可能是b(bb是回文子串),所以第三个字母只能是c,同理第四个只能是a...所以一定是三个字母一循环的形式原创 2021-11-24 14:23:37 · 545 阅读 · 0 评论 -
A - Portal(cf) 前缀和 区间维护
原题链接:Problem - 1580A - Codeforces题意:给定一个字符数组,每个字符是0或者1。问能不能找到一个子数组n >= 5 && m >= 4,要使数组四周除了四个顶角其他都要变成1,中间的地方全要变成0,问最小改变次数。分析一下,可以用for循环枚举上下边界,每次固定上下边界就开始看左右边界。1.首先有个前缀和,s[i][j] = s[i - 1][j],每一列的前缀和,可以很好算中间部分的1的个数(需要转变为0的次数);2.设此时固定了上原创 2021-11-17 19:58:38 · 429 阅读 · 0 评论 -
Subsequence子序列(前缀和、下标单增)
原题链接:Subsequence - UVALive 2678 - Virtual Judge题意:由n个正整数组成的一个序列,给定整数S,求长度最短的连续序列,使他们的和大于等于S。(1<=n<=10^5,S<10^9)前缀和是要求的后面有两种方法(1)顺i找j(2)顺j找i详细内容在代码注释里写了多理解多思考一定要注意细节,很容易错#include<iostream>#include<cstring>using name原创 2021-10-23 13:46:27 · 472 阅读 · 0 评论