Good News And Bad News

扔鏈接跑
處理出來i之前的最大的dis,i之後的最大的dis,然後 if((min_aft[i]-dis[i-1]>=0)&&(min_dis[i-1]+dis[n]-dis[i-1]>=0))

#include <iostream>
#include <cstdio> 
using namespace std;
long long dis[1000010],a[1000010],min_dis[1000010],min_aft[1000010];
int main()
{
    long long n,tot=0;
    cin>>n;
    min_dis[0]=1e17;
    min_aft[n+1]=1e17;
    for(long long i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        dis[i]=dis[i-1]+a[i];
        min_dis[i]=min(min_dis[i-1],dis[i]);
    }
    for(long long i=n;i>=1;i--)
        min_aft[i]=min(min_aft[i+1],dis[i]);
    for(long long i=1;i<=n;i++)
    {
        if((min_aft[i]-dis[i-1]>=0)&&(min_dis[i-1]+dis[n]-dis[i-1]>=0))
            tot++;
    }
    cout<<tot<<endl;
    return 0;
} 
發佈了51 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章