zoukankan      html  css  js  c++  java
  • Codeforces1141F2 Same Sum Blocks (Hard)

    Description

    Input

    Output

    Solution


    题意就是求最大的序列和相等的子序列个数
    对于每一个子序列,显然当右边界越小的时候,后面选到的子序列的个数可能会更多
    而且(nleqslant 1500),我们可以(n^{2})暴力枚举
    时间复杂度(O(n^{2}))

    Code

    #include <cstdio>
    #include <algorithm>
    #define MO 1635947 
    #define N 1501
    #define open(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
    using namespace std;
    int n,i,j,k,t,o,ans,pl,a[N],has[N*N],p[N*N][2],tot[N*N],r[N*N];
    int HASH(int x)
    {
        int t=x;
        while (t<0) t+=MO;
        t%=MO;
        while (has[t] && has[t]!=x) t=(t+1)%MO;
        has[t]=x;
        return t;
    }
    int main()
    {
        open("blocksh");
        scanf("%d",&n);
        for (i=1;i<=n;i++)
            scanf("%d",&a[i]);
       	for (j=1;j<=n;j++)
        {
            k=0;
            for (i=j;i>=1;i--)
            {
                k+=a[i];
                t=HASH(k);
                if (i>r[t])
                {
                    tot[t]++;
                    r[t]=j;
                    if (ans<tot[t]) ans=tot[t],pl=t;
                }
            }
        }
        printf("%d
    ",ans);
        o=0;
        for (j=1;j<=n;j++)
        {
            k=0;
            for (i=j;i>o;i--)
            {
                k+=a[i];
                if (k==has[pl])
                {
                    o=j;
                    printf("%d %d
    ",i,j);
                    break;
                }
            }
        }
        return 0;
    }
    
    如果自己说什麽都做不到而什麽都不去做的话,那就更是什麽都做不到,什麽都不会改变,什麽都不会结束.
  • 相关阅读:
    Hamming Distance(随机算法)
    Difference Between Primes
    Pet(dfs)
    29. Divide Two Integers
    28. Implement strStr()
    25. Reverse Nodes in k-Group
    24. Swap Nodes in Pairs
    23. Merge k Sorted Lists
    22. Generate Parentheses
    19. Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/Sport-river/p/13811330.html
Copyright © 2011-2022 走看看