題意
每個人都有一個長度為 li的武器,相鄰的兩個人之間距離為 1 ,同一時間所有人使用武器攻擊左邊的人,問最後存活下來的人數。
題解
最後一個肯定沒事,則ans = 1,從最後一個往前面周遊,以最後一個的範圍周遊,找出裡面最長的範圍更新周遊,即當達到最大範圍的最後一個人之後,加入另一個人,ans++,以他的範圍繼續周遊,重複操作
#include <bits/stdc++.h>
#define MAXN 1000005
using namespace std;
int main()
{
int n;
while(~scanf("%d", &n))
{
int num[MAXN];
for(int i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
int ans = 0, len = -1;
for(int i = n-1; i >= 0; i--)
{
int temp = num[i];
if(len < 0) ans++;
len = max(len, temp);
len--;
}
cout<<ans<<endl;
}
}