• 【P2629】好消息,坏消息(前缀和+单调队列优化DP)


    一激动一颓就会忘了总结。。。

    前面的大黄题就不总结了。

    这个题我只想说一声艹,一开始的思路就是正确的,然后计算的时候有了一个瑕疵,不过很快也就改过来了。然后却一直连样例都过不了。仔仔细细看了老半天,经过了半个小时之后,忍不住瞄了一眼题解,突然觉悟到自己的前缀和打错了。。。。。。。

    附前缀和计算方法:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #define re register
    #define wc 0.0000000001
    using namespace std;
    int head,tail,n,m,a[2000001],d,q[3000001],ans,cnt,b[10000001],s[2000001];
    int main()
    {
        cin>>n;
        for(re int i=1;i<=n;i++)
        {
            cin>>a[i];
            a[i+n]=a[i];
        }
        for(re int i=1;i<=2*n;i++)
        s[i]=s[i-1]+a[i];
        head=1;tail=0;
        for(re int i=1;i<=2*n;i++)
        {
            while(head<=tail&&s[i]<=s[q[tail]])
            tail--;
            q[++tail]=i;
            while(head<=tail&&i-q[head]>n)
            head++;    
            if(i>n&&s[q[head]]-s[i-n-1]<0)
            b[i]=1;
            
        }
        
        for(re int i=n+1;i<=n*2;i++)
        {
            if(!b[i])
            ans++;
        }
        cout<<ans;
    }
    s[i]-s[j-1]为i到j的前缀和,而不是s[i]-s[j];
  • 相关阅读:
    NOIP201105铺地毯
    50148155HYF旅游
    连通性判断
    传递消息1
    找朋友
    5796: 最短Hamilton路径(状压dp)
    2283: A Mini Locomotive(01背包)
    2616: Cow Frisbee Team(01背包)
    2593: Secret Message(字典树)
    Stammering Aliens(二分+Hash 卡过)
  • 原文地址:https://www.cnblogs.com/victorique/p/8426846.html
Copyright © 2020-2023  润新知