题目链接:传送门
题目大意:有n个人,每个人i有一个杀人的范围Li,每个人都是在一瞬间出手的(他会杀掉他范围内的人,即使后来他被杀掉),在【i-Li,i-1】范围内的人都会被杀掉。
问有多少个人还活着?
代码:只需从后遍历,不断更新,能够杀人的范围即可。
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1e6+9;
int a[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
int sum=0,len=a[n-1];//sum记录能杀掉多少个人,len记录还能杀掉多少个人。
for(int i=n-2; i>=0; i--)
{
if(len)//还能杀掉人
sum++;
len--;//个数减一
len=max(len,a[i]);//不断更新最大值。
}
printf("%d\n",n-sum);//输出还活着多少人
}
return 0;
}