zoukankan      html  css  js  c++  java
  • TZOJ 5065 最长连续子序列(前缀和)

    Description

    给定一系列非负整数,求最长的连续子序列,使其和是7的倍数。

    Input

    第一行为正整数N(1<=N<=50000),接下来有N行,每行有一个非负整数,所有整数不大于10^6。

    Output

    如果存在连续子序列,其和为7的倍数,则输出子序列长度,如果不存在则输出0。

    Sample input

    7
    3
    5
    1
    6
    2
    14
    10

    Sample output

    5

    #include<bits/stdc++.h> 
    #define MAX 50005
    using namespace std;
    int main()
    {
        int n,i,j,len,maxx=0,A[MAX],right[9],left[9];
        cin>>n;
        memset(left,-1,sizeof(left));
        memset(right,-1,sizeof(right));
        A[0]=0;
        left[0]=0;
        for(i=1;i<n;i++)
        {
            scanf("%d",&A[i]);
            A[i]=(A[i-1]+A[i])%7;
            if(left[A[i]]==-1)
                left[A[i]]=i;
        }
        
        for(i=n-1;i>=0;i--)
            if(right[A[i]]==-1)
                right[A[i]]=i;
                
        for(i=0;i<=8;i++)
            for(j=0;j<=8;j++)
                if(right[i]>=0&&left[j]>=0&&i==j)
                {
                    len=right[i]-left[j];
                    maxx=max(len,maxx);
                }
        cout<<maxx<<endl;
        return 0;
    }

     

  • 相关阅读:
    树状数组和线段树
    N皇后问题(函数式编程与过程式)
    单例模式
    BitSet
    蓄水池抽样问题
    关于动态规划的一些感想
    53最大子序和
    5最长回文子串
    139单词拆分
    91.解码方法
  • 原文地址:https://www.cnblogs.com/kannyi/p/8524750.html
Copyright © 2011-2022 走看看