首页 > 相邻的糖果
头像 2025112525
发表于 2026-02-07 11:47:05
Ps: 1.含有一版代码 2. 包含本人做题思路(包括错误思路总结)-> 专放于“做题思路”一节 3. sum (窗口数据求和)、num[ ](储存输入元素)、n(元素总个数)、x(限定最大值)、m(窗口长度/相邻盒子数)、ans(答案)一。思路 展开全文
头像 牛客859451782号
发表于 2026-02-07 10:13:30
#include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; 展开全文
头像 此在Dasein
发表于 2026-02-07 02:46:04
本题是一个经典的贪心算法结合滑动窗口的问题。 当发现一个区间 的糖果总和超过 时,我们必须吃掉多余的糖果。 问题在于:应该吃掉区间内哪一个盒子里的糖果? 策略A(吃左边):如果吃掉区间最左边的糖果(即 ),它只能帮助当前区间满足条件,那个位置马上就会滑出下一个窗口,对后续区间的贡献为0。 策略 展开全文
头像 bing糖雪狸
发表于 2026-02-07 13:26:08
/* * @Author: tkzzzzzz6 * @Date: 2026-02-07 12:16:06 * @LastEditors: tkzzzzzz6 * @LastEditTime: 2026-02-07 12:26:25 */ // 滑动窗口(循环数组实现) + 贪心 #in 展开全文
头像 Turgen
发表于 2026-02-07 01:25:44
如果把每组m个元素看成一个分区,我们的分区示意图如下:可以明显看到:每个m元素的分区,削减最后一个元素,可以让影响后续m个分区,使它们的负担变小,因此我们的贪心策略是:每次优先删除一个分区的最后几个元素,因为这样可以帮助后续几个分区的总和一起减小。在实现上,维护一个变量s,用来表示当前窗口的值,每次 展开全文
头像 三杯鸡_蒸蛋
发表于 2026-02-07 10:33:38
#include <iostream> #include<vector> #include <bits/stdc++.h> using namespace std; int main() { long long n,m,x; cin>> 展开全文
头像 YunBaichuan
发表于 2026-02-07 11:34:15
思路:定长滑动窗口+贪心。我们要让每个滑动窗口的值都并且操作数最少,那就主要操作窗口中靠近右侧的元素。为什么?因为越靠近右侧的元素,在我们向右滑动窗口时,更容易被保留下来,也就会产生更大的贡献。 因此,我们就滑动窗口,当发现窗口中的和时,就累加操作数,然后从窗口右端开始往左端,对元素进行减操作,修改 展开全文
头像 2025112525
发表于 2026-02-07 12:09:50
Ps: 1.含有一版代码 2. 包含本人做题思路(包括错误思路总结)-> 专放于“做题思路”一节 3. sum (窗口数据求和)、num[ ](储存输入元素)、n(元素总个数)、x(限定最大值)、m(窗口长度/相邻盒子数)、ans(答案)一。思路 展开全文
头像 仙鹤要吃鱼
发表于 2026-02-07 13:29:48
用add维护窗口的总和,每次尽量从窗口最右边的盒子减少,如果不够,就继续往左移,直到满足要求,用res记录操作的次数虽然比较麻烦,但也是比较神秘地通关了 n,m,x = map(int,input().split()) a = list(map(int,input().split())) + [0] 展开全文
头像 为芙宁娜献出心脏
发表于 2026-02-07 18:33:26
(前面一直看找到代码问题,后面才发现自己变量打错了) 很明显的贪心做法,因为一个糖果是可以在多个连续m个盒子区间中的,所以在修改的时候我肯定是想要修改被比较多个区间包含的糖果(这里后面还会有修改) 但是我肯定不是直接从中间出发看每一个糖果盒是否修改,因为你还要考虑到每个盒子里的糖果数量,因为我是不能 展开全文