首页 > 其他分享 >P3817 小A的糖果

P3817 小A的糖果

时间:2024-09-22 19:47:10浏览次数:6  
标签:吃掉 盒子 int 样例 leq P3817 糖果

小A的糖果

题目描述

小 A 有 $n$ 个糖果盒,第 $i$ 个盒中有 $a_i$ 颗糖果。

小 A 每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中糖的个数之和都不大于 $x$,至少得吃掉几颗糖。

输入格式

输入的第一行是两个用空格隔开的整数,代表糖果盒的个数 $n$ 和给定的参数 $x$。

第二行有 $n$ 个用空格隔开的整数,第 $i$ 个整数代表第 $i$ 盒糖的糖果个数 $a_i$。

输出格式

输出一行一个整数,代表最少要吃掉的糖果的数量。

样例 #1

样例输入 #1

3 3
2 2 2

样例输出 #1

1

样例 #2

样例输入 #2

6 1
1 6 1 2 0 4

样例输出 #2

11

样例 #3

样例输入 #3

5 9
3 1 4 1 5

样例输出 #3

0

提示

样例输入输出 1 解释

吃掉第 2 盒中的一个糖果即可。


样例输入输出 2 解释

第 2 盒糖吃掉 $6$ 颗,第 4 盒吃掉 $2$ 颗,第 6 盒吃掉 $3$ 颗。


数据规模与约定

  • 对于 $30%$ 的数据,保证 $n \leq 20$,$a_i, x \leq 100$。
  • 对于 $70%$ 的数据,保证 $n \leq 10^3$,$a_i, x \leq 10^5$。
  • 对于 $100%$ 的数据,保证 $2 \leq n \leq 10^5$,$0 \leq a_i, x \leq 10^9$。

算法1

(贪心)

贪心策略:
如果相邻两个盒子糖果的数量大于x,就吃右边盒子的糖,否则不进行任何操作

为什么吃右边盒子的糖果呢?

如果我们吃掉左边盒子里的糖,就只会减少这一轮相邻两个盒子糖果的数量;
如果我们吃掉右边盒子里的糖,那么这次操作还可以减少下一轮相邻两个盒子糖果的数量,
因此符合贪心的逻辑

C++ 代码

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1e5 + 10;

int n,x;
int a[N];
int ans;

signed main(){
	scanf("%lld%lld",&n,&x);
	
	for(int i = 1; i <= n; i++){
		scanf("%lld",&a[i]);
	}
	for(int i = 1; i <= n; i++){
		if(a[i] + a[i-1] > x) {
			ans += a[i] - x + a[i - 1];
		//	cout << a[i] - x + a[i - 1] << endl;
			a[i] = x - a[i - 1];
		//	cout << a[i] << endl;
		}
	}
	printf("%lld",ans);
	return 0;
} 

标签:吃掉,盒子,int,样例,leq,P3817,糖果
From: https://www.cnblogs.com/ltphy-/p/18425751

相关文章

  • LeetCode135.分发糖果(C#)
    题目描述:n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。示例......
  • 蓝桥杯2019省A糖果题解
     附上链接:[蓝桥杯2019省A]糖果-洛谷,有兴趣的小伙伴可以去试试哦~#[蓝桥杯2019省A]糖果##题目描述糖果店的老板一共有$M$种口味的糖果出售。为了方便描述,我们将$M$种口味编号$1$∼$M$。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而......
  • 135. 分发糖果(leetcode)
    https://leetcode.cn/problems/candy/description/贪心,策略是确定一侧的正确性,再确定另一侧的正确性,最后综合作为正确答案,其中先确定一侧的正确性是局部最优,确定两侧的正确性的局部最优,且找不到反例就可以推出全局最优答案classSolution{publicintcandy(int[]ra......
  • 代码随想录训练营day29|134.加油站,135. 分发糖果,860.柠檬水找零,406.根据身高重建队列
    加油站想法:暴力遍历?好吧第一遍写的时候读错题意了,以为是比较gas[i]与cost[i+1]的值,shit。intsum1=0,sum2=0;for(intg:gas)sum1+=g;for(intc:cost)sum2+=c;if(sum1<sum2)return-1;//如果gas没cost多intyouliang=0;intn=gas.size()......
  • P8518 [IOI2021] 分糖果 题解
    DescriptionKhong阿姨正在给附近一所学校的学生准备\(n\)盒糖果。盒子的编号分别为\(0\)到\(n-1\),开始时盒子都为空。第\(i\)个盒子\((0\leqi\leqn-1)\)至多可以容纳\(c[i]\)块糖果(容量为\(c[i]\))。Khong阿姨花了\(q\)天时间准备糖果盒。在第\(j\)天......
  • 代码随想录day29 || 134 加油站,135 分糖果,860 柠檬水找零,406 根据身高重建队列
    加油站funccanCompleteCircuit(gas[]int,cost[]int)int{ //思路,首先统计一个差值数组,表示行驶到下一个加油站可以补充的油量,然后加总差值数组, //如果小于0,表示从起始位置到目前为止剩余油量小于0,不足以跑完全程,同时将起始位置放到遍历的下一个位置 iflen(gas)==0......
  • 打卡信奥刷题(528)用Scratch图形化工具信奥B2020[普及组/提高] 分糖果
    分糖果题目描述某个幼儿园里,有555位小朋友编号依次为1,2......
  • 135. 分发糖果【 力扣(LeetCode) 】
    一、题目描述  n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。  你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到1个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。  请你给每个孩子分发糖果,计算并返回需要准备的最少糖果数......
  • 代码随想录算法训练营第二十五天|134. 加油站、135. 分发糖果、860.柠檬水找零、406.
    写代码的第二十五天继续贪心!!gogogo!134.加油站思路贪心算法总让我有种脑子知道每次怎么计算,但是写不出来,也想不出贪心贪在哪里了,就只是觉得应该这么做。。。。。本题中大家可以按照自己的计算方法一步一步模拟一下这个过程,然后会发现其实每次都是要计算每站剩余的油量,......
  • LeetCode135. 分发糖果
    题目链接:https://leetcode.cn/problems/candy/description/题目叙述:n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到1个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发......