6.小蓝的跳跃【算法赛】 - 蓝桥云课 (lanqiao.cn)
思想
贪心
求一下最大值最小值,最大值里面肯定全是1,没有-1。假设x比最大值大,那么小蓝怎么走都走不到x。如果x比最大值小,那么小蓝就看可以走-1的格子,把心情调到x。
同理,最小值一定全是-1相加的结果,如果x比最小值还小,那么小蓝怎么走都无法达到x心情。如果x比最小值大,那么小蓝可以走价值为1的格子调整心情为x。
因此答案一定在最小值,最大值之间。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int f[N],g[N];
void solve()
{
int n,x;cin>>n>>x;
vector<int>a(n+5);
for(int i=1;i<=n;i++)cin>>a[i];
f[1]=g[1]=a[1];
for(int i=2;i<=n+1;i++)
{
f[i]=max(f[i-1],f[i-2])+a[i];
g[i]=min(g[i-1],g[i-2])+a[i];
}
if(x>=g[n+1]&&x<=f[n+1])cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
int main()
{
int t;cin>>t;
while(t--)
{
solve();
}
return 0;
}