首先,读题时先想一想暴力怎么解,那肯定是枚举从1到n所有的y的大小再判断呗,一个区间枚举,肯定是二分,最小值那就肯定是找左,那么问题来了,check函数怎么写,那就是满足什么情况下过关,暴力思考一下,肯定是y的范围的所有石头每过一次-1,一直到2x的时候,看看有没有剩下的石头可以跳,看看能不能列下式子,就是石头的和-2x>0,就是有一个石头剩下了,就是可以的情况,否则不可以
```
blablabla#include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
bool check(int m,vector[HTML_REMOVED]&s,int n,int x)
{
for(int i=1;i+m<=n;i)
{
if(s[i+m-1]-s[i-1]<2*x)
{
return false;
}
}
return true;
}
int main()
{
int n,x;
cin>>n>>x;
vector[HTML_REMOVED]arr(n+1);
for(int i=1;i<=n;i)
{
cin>>arr[i];
}
vector[HTML_REMOVED]s(n+1);
for(int i=1;i<=n;i++)
{
s[i]=s[i-1]+arr[i];
}
int l=1;
int r=n;
while(l<r)
{
int mid=(l+r)/2;
if(check(mid,s,n,x))
{
r=mid;
}
else
{
l=mid+1;
}
}
cout<<l;
return 0;
}```