首页 > 其他分享 >蓝桥杯 & 青蛙过河(最快贪心) (不用并查集)

蓝桥杯 & 青蛙过河(最快贪心) (不用并查集)

时间:2023-03-04 10:45:52浏览次数:42  
标签:oo int ll 查集 mid else 蓝桥 ans 贪心

 

 

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000000+7;
ll a[N];
ll b[N];
ll c[N];
ll n,x;
bool check(ll w)
{
    ll ans=0;
    ll o,oo=c[w];
    for(int i=1;i<n;i++) b[i]=a[i];

		ll idx=1;
		b[n]=999999999;
		for(int i=w+1;i<=n;i++)
  	 	{
    	o=0;
    	o=oo;
		if(o<=b[i])
		{
			b[i]=o;
			for(int j=idx;j<i;j++) b[j]=0;
			idx=i;
			oo=b[i];
		}
		else
		{
			o=b[i];
			for(int j=idx;j<i;j++)
			{
				if(o>=b[j])
				{
					o-=b[j];
					b[j]=0;
				}
				else
				{
					idx=j-1;
					b[j]-=o;
					break;
				}
			}
			if(b[i-w]!=0)
			{
				oo=oo-b[i-w];
			}
			idx=max(idx,i-w+1);
			}
		}
		ans=b[n];
    if(ans>=x*2) return true;
    else
    return false;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>x;
    for(int i=1;i<n;i++)
    {
        cin>>a[i];
        c[i]=a[i]+c[i-1];
    }
    ll l=1,r=n;
    while(l<r)
    {
     
        ll mid=(l+r)>>1;
        if(check(mid))
        {
            r=mid;
        }
        else
        {
            l=mid+1;
        }
    }
    cout<<l;
     
    return 0;
}

标签:oo,int,ll,查集,mid,else,蓝桥,ans,贪心
From: https://www.cnblogs.com/xxj112/p/17177788.html

相关文章