2023河南萌新联赛第(二)场:河南工业大学 补题 E.释怀的RT

题目链接:

E-释怀的RT_2023河南萌新联赛第(二)场:河南工业大学 (nowcoder.com)

题目大意:

给n个格子,每个格子上的数代表可以照亮左右两边的长度,格子本身不能被照亮,问一共有多少个格子能被照亮。

题目思路:

将每个灯能照亮的格子+1,那么不能照亮的地方的值就为0,累计有多少个不为0的格子,即为最终答案。由于要多次修改区间值,所以考虑使用差分来优化,再注意一下边界就好了。

如何差分优化:

s+=b[i];   //s为当前格子的前缀和

代码实现:

#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdio.h>
#define int long long
using namespace std;
const int N=1e6+10;
int n;
int a[N];
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		a[max((int)1,i-x)]++;
		a[i]--;
		a[i+1]++;
		a[min((int)n+1,i+x+1)]--;
	}
	int s=0,cnt=0;
	for(int i=1;i<=n;i++)
	{
		s+=a[i];//前缀和,判断当前的格子有没有被照亮
		if(s>0)cnt++;
	}
	cout<<cnt<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值