站外题求助
  • 板块学术版
  • 楼主Kmeow
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/4 18:49
  • 上次更新2024/8/4 20:09:42
查看原帖
站外题求助
1070491
Kmeow楼主2024/8/4 18:49

3.分发糖果

题目描述

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?

输入格式

第一行一个 n,表示孩子数。(1≤n≤100) 接下来一行,输入n个孩子的评分。(0≤si≤10)

输出格式

糖果数

样例

Input1

3
1 0 2

Output1

5

样例解释

解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。

数据范围

1<=n<=100 1<=孩子的分数<=10

#include <bits/stdc++.h>
using namespace std;
const int N=1E6+5;
int n,sum;
int a[N],vis[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		vis[i]++;
	}
	for(int i=1;i<=n;i++)
		if(a[i]<a[i+1])
			vis[i+1]++;
		else
			vis[i]++;
	for(int i=n;i<=1;i++)
		if(a[i]<a[i+1])
			if(a[i+2]>=a[i+1])
				a[i+2]++;
		else if(a[i+2]<=a[i+1])
			vis[i+1]++;
		else
			vis[i]++;
	for(int i=1;i<=n;i++)
		sum+=vis[i];
	for(int i=n;i<=1;i++)
		sum+=vis[i];
	cout<<sum;
	return 0;
}
2024/8/4 18:49
加载中...