代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<vector>
#include<math.h>
#include<algorithm>
#include<map>
#include<set>
#include<stack>
#include<cctype>
#include<queue>
#define ll long long
// freopen("D:\\in.txt" ,"r" ,stdin);
// freopen("D:\\out.txt" ,"w" ,stdout);
using namespace std;
int main(void)
{
int t;
int a[100005];
cin>>t;
while(t--)
{
bool f=0;
int n,m;
int pos;
int mx=-1;
cin>>n>>m;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)//找出最能吃的那个
{
cin>>a[i];
if(a[i]>mx)
{
mx=a[i];
pos=i;
}
}
int l=m;//当轮到第i个人吃时 他可能拿到的最多的西瓜数
int r=m;//当轮到第i个人吃时 他可能拿到的最少的西瓜数
//如果不是最能吃的人拿到了l<=0 说明任何情况都不能使它这次有西瓜吃 所以凉在了这个人上
//如如果是最能吃的人拿到了r<=0 说明前面的人存在一种情况可以把西瓜吃完 所以凉在了这个最能吃的人上
int cnt=1;
while(1)
{
if(cnt!=pos && l<=0)
{
break;
}
else if(cnt==pos && r<=0 )
{
f=1;
break;
}
if(cnt!=pos)
{
l-=1;
r-=a[cnt];
}
else if(cnt==pos)
{
l-=a[cnt];
r-=a[cnt];
}
cnt++;
if(cnt>=n+1) cnt=1;
}
if(f==0) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}