題目連接配接:
最近偷懶沒學,也因為新型冠狀病毒,弄得人心惶惶,然後今天打了以前的賽,打
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);
}
}
}
#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");
}
}
}