P3817 小A的糖果

发布时间:2024年01月15日

# 小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$。

#include<stdio.h>

int main()
{
	long long n, x, i, max=0,sum=0;
	long long a[100000];
	scanf("%lld %lld", &n, &x);
	for (i = 0; i < n; i++)
	{
		scanf("%lld", &a[i]);
	}
	for (i = 0; i < n - 1; i++)
	{
		if (a[i] + a[i + 1] > x){
            max = a[i] + a[i + 1] - x;
            a[i+1] = x-a[i];
            sum+=max;
        }
        if(a[i+1]<0){
			a[i]+=a[i+1];
			a[i+1]=0;
		}
	}
	printf("%lld", sum);
}

文章来源:https://blog.csdn.net/zRenox/article/details/135612639
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。