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+;
const int dis[][]={{,},{-,},{,-},{,}};
using namespace std;
ll gcd(ll p,ll q){return q==?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=;while(q){if(q&)f=f*p;p=p*p;q>>=;}return f;}
int n,m;
ll a[maxn],pre[],last[],now;
int main()
{
int i,j,k,t;
scanf("%d",&n);
rep(i,,n){
scanf("%lld",&a[i]);
now=(now+a[i])%;
if(pre[now])last[now]=i;
else pre[now]=i;
}
ll ma=;
rep(i,,)
{
if(pre[i]&&last[i])ma=max(ma,last[i]-pre[i]);
}
printf("%lld\n",ma);
//system ("pause");
return ;
}

最新文章

  1. 约瑟夫问题(c++实现)
  2. 自己动手做jQuery插件
  3. Redis 三:存储类型之字符串
  4. [HDOJ4635]Strongly connected(强连通分量,缩点)
  5. JSON数据理解
  6. MySql安装与卸载
  7. zabbix基本操作
  8. 2.4配置的热更新「深入浅出ASP.NET Core系列」
  9. 踩坑学习python自动化测试第一天!
  10. 获取当前div中的文本(只获取当前div的, 子元素不要, 基于layui)
  11. Python学习资源汇总,转载自他人
  12. python中remove的一些坑
  13. Tarjan学习笔记
  14. 软件架构设计学习总结(3):QQ空间技术架构之详解
  15. zhuzher日志log
  16. Inversion of Control Containers and the Dependency Injection pattern
  17. ajax表单提交post(错误400) 序列化表单(post表单转换json(序列化))
  18. ubuntu下用户的创建、修改
  19. leetCode--towSum
  20. QT分析之QApplication的初始化

热门文章

  1. a标签无跳转的死链接
  2. 《Head.First设计模式》的学习笔记(9)--外观模式
  3. mongodb导出数据
  4. photoshop 魔术橡皮擦
  5. javascript IP验证
  6. adodb.stream对象的方法/属性
  7. 20160128_关于SVN提交不了并且还提示升级的解决方法
  8. 在Android studio中进行NDK开发
  9. publish over ssh
  10. push以及pop,shift,unshift