zoukankan      html  css  js  c++  java
  • Subsequences Summing to Sevens

    Subsequences Summing to Sevens

    题目描述

    Farmer John's N cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to take a photo of a contiguous group of cows but, due to a traumatic childhood incident involving the numbers 1…6, he only wants to take a picture of a group of cows if their IDs add up to a multiple of 7.

    Please help FJ determine the size of the largest group he can photograph.

    输入

    The first line of input contains N (1≤N≤50,000). The next N lines each contain the N integer IDs of the cows (all are in the range 0…1,000,000).

    输出

    Please output the number of cows in the largest consecutive group whose IDs sum to a multiple of 7. If no such group exists, output 0.

    You may want to note that the sum of the IDs of a large group of cows might be too large to fit into a standard 32-bit integer. If you are summing up large groups of IDs, you may therefore want to use a larger integer data type, like a 64-bit "long long" in C/C++.

    样例输入

    7
    3
    5
    1
    6
    2
    14
    10
    

    样例输出

    5
    

    提示

    In this example, 5+1+6+2+14 = 28. 

    分析:(i+j)%k=i%k,则j是k的倍数;

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include <bitset>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define vi vector<int>
    #define pii pair<int,int>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    const int maxn=1e6+10;
    const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
    using namespace std;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
    int n,m;
    ll a[maxn],pre[7],last[7],now;
    int main()
    {
        int i,j,k,t;
        scanf("%d",&n);
        rep(i,1,n){
            scanf("%lld",&a[i]);
            now=(now+a[i])%7;
            if(pre[now])last[now]=i;
            else pre[now]=i;
        }
        ll ma=0;
        rep(i,0,6)
        {
            if(pre[i]&&last[i])ma=max(ma,last[i]-pre[i]);
        }
        printf("%lld
    ",ma);
        //system ("pause");
        return 0;
    }
  • 相关阅读:
    Linux GCC常用命令
    用两个栈实现一个队列(转载)
    BMP格式介绍(一)
    图像处理笔记(1): bmp文件结构处理与显示
    大数据竞赛平台——Kaggle 入门篇
    图像识别中的深度学习
    面向对象中的抽象和具体类的理解
    全排列算法
    少有程序员读的书
    照片回执
  • 原文地址:https://www.cnblogs.com/dyzll/p/5743093.html
Copyright © 2011-2022 走看看