​题目连接:​

最近偷懒没学,也因为新型冠状病毒,弄得人心惶惶,然后今天打了以前的​​cf​​​赛,打​​cf​​真的是让我很难受,我总是把题往各种方面想,然后就偏了方向,最后写出来的代码又长又臭

一开始看到题,我的思路是贪心,感觉没什么问题,测了几组样例,就交了,然后WA,交了两发后,没往深处想,就切了思路,然后就找到了贪心思路的反例,但也没去想第一种思路,第二种思路:二分+前缀和枚举,想到了,手测了几组数据,反例给过了,然后就开始敲,敲出来后,过了反例,又测了七八组普通样例,没问题,就交,又WA,WA到结束,最后我知道问题出在哪了,这种思路的前置条件,我没考虑,感觉考虑了,就可以过,看了题解后,只要在第一种思路上改一下就过了,真难受,这个问题一定要改!

错误代码:
感觉改改可以过

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=2e5+5;
ll a[maxn],sum[maxn],n;
ll lower(ll l,ll r,ll x)
{
if(x>=sum[n])
return n;
ll res=1;
while(l<=r)
{
ll mid=l+r>>1;
if(sum[mid]>x)
{
res=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
return res-1;
}
int main()
{
ll t,s;
scanf("%lld",&t);
while(t--)
{
scanf("%lld %lld",&n,&s);
for(ll i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
sum[i]=sum[i-1]+a[i];
}
ll fla=0,maxx=-1,temp=0;
for(ll i=1; i<=n; i++)
{

if(s>a[i-1])
{
ll temp=lower(1,n,s+a[i]);
if(temp>maxx)
{
maxx=temp;
fla=i;
}
}
}
if(s-sum[n]>=0)
{
printf("0\n");
}
else
{
printf("%lld\n",fla);
}
}
}

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
#define ll long long
ll a[maxn];
int main()
{
ll t,n,s;
scanf("%lld",&t);
while(t--)
{
scanf("%lld %lld",&n,&s);
ll res=0,id,maxx=0;
for(ll i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
}
for(ll i=1;i<=n;i++)
{
res+=a[i];
if(a[i]>=maxx)
{
maxx=a[i];
id=i;
}
if(res>s)
{
break;
}
}
if(res>s)
{
printf("%lld\n",id);
}
else
{
printf("0\n");
}

}

}