天天看點

Educational Codeforces Round 79 (Rated for Div. 2) B. Verse For Santa

​​題目連接配接:​​

最近偷懶沒學,也因為新型冠狀病毒,弄得人心惶惶,然後今天打了以前的​

​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");
        }

    }

}      

繼續閱讀