摘自题解:

题意转化一下就是:

给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除。

分析:

设这列数前i项和为s[i],

则一段连续的数的和 a[i]+a[i+1]+...+a[j-1]+a[j]=s[j]-s[i-1],

所以这段连续的数的和能被m整除的条件就是 (s[j]-s[i-1]) % m == 0,

即 s[j]%m-s[i-1]%m == 0,

因此,只需要每一个余数找使s[i]%m等于该余数的最小的i,和s[j]%m等于该余数的最大的j,相减即为最长的连续的数的长度。

然后,可以预处理一下,用一数组存下模相同几个前缀和的最小坐标,使得代码优化为O(N)的时间复杂度。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
#define INF 0x7fffffff
#define M 100010 using namespace std; int p[M];
LL sum[M];
int main ()
{
int n, m;
LL x;
while(~scanf("%d %d",&n, &m))
{
for(int i = 0; i < m; ++i)
p[i] = INF;
for(int i = 1; i <= n; ++i)
{
scanf("%I64d", &x);
sum[i] = sum[i-1]+x;
int d;
if(sum[i]<=0)
{
d = sum[i]/m;
sum[i]+=m*(-d+1);
}
sum[i]%=m; p[sum[i]] = min(i,p[sum[i]]);
}
int ans = 0;
for(int i = 1; i <= n; ++i)
{
if(sum[i]==0)
ans = max(ans, i);
else
{
int t = i-p[sum[i]];
ans = max(ans, t);
}
}
printf("%d\n",ans);
}
return 0;
}

hdu 4648 - Magic Pen 6(“水”题)的更多相关文章

  1. HDU 4648 Magic Pen 6 (。。。。。。。。。。)

    Magic Pen 6 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  2. HDU 4648 Magic Pen 6

    题目链接 6Y什么水平.. #include <cstdio> #include <cstring> #include <string> #include < ...

  3. HDU 4648 Magic Pen 6 思路

    官方题解: 题意转化一下就是: 给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除. 分析: 设这列数前i项和为s[i], 则一段连续的数的和 a[i]+a[i+1] ...

  4. HDU 5578 Friendship of Frog 水题

    Friendship of Frog Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.ph ...

  5. HDU 5590 ZYB's Biology 水题

    ZYB's Biology Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid ...

  6. HDU 5538 L - House Building 水题

    L - House Building Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.ph ...

  7. hdu 1005:Number Sequence(水题)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. hdu 1018:Big Number(水题)

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. hdu 2041:超级楼梯(水题,递归)

    超级楼梯 Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Su ...

随机推荐

  1. uva 10340 All in All

    水题,从头到尾扫一遍就可以了,输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s.例如,abcde可以得到bce,但无法得到dc. #include<a ...

  2. swift 当协议遇见了泛型

    由于泛型比较简单,并没有单独拿出来介绍!我们在定义函数的时候,有时候只是由于参数或者返回值类型不同,而具体的实现过程是一模一样的,这个时候我们就可以定义泛型函数而使可以传入不同的参数类型: func ...

  3. The Magic only works with total devotion of one's heart

    The Magic only works with total devotion of one's heart All tools and equipments are useless without ...

  4. Linux下find命令

    转自:http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html 1.1.find命令的一般形式 man文档中给出的find命令的一般形 ...

  5. ---解决git pull 后出现冲突的解决方法

    0. git statusOn branch masterYour branch and 'origin/master' have diverged,and have 1 and 3 differen ...

  6. Python PEP 492 中文翻译——协程与async/await语法

    原文标题:PEP 0492 -- Coroutines with async and await syntax 原文链接:https://www.python.org/dev/peps/pep-049 ...

  7. JavaScript valueOf() 函数详解

    valueOf()函数用于返回指定对象的原始值. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. 所有主流浏 ...

  8. 循序渐进Python3(四) -- 装饰器、迭代器和生成器

    初识装饰器(decorator ) Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数. 使用 decorator 用Python提供的 @ 语法 ...

  9. 将CSDN和WordPress上的旧文章迁移过来

    我最早用的博客是CSDN,但是不喜欢CSDN的博客,发文章还要审核,界面做的也很模糊,发个文章还必须选个分类.总之不像是用心在做博客这个功能. 后来,我自己搭建了一个网站(www.wangyufeng ...

  10. Visual Studio VS2010统计代码行数(转载)

    本文转自:http://blog.csdn.net/zhouworld16/article/details/9292851 在网上看到别人用的方法: 按CTRL+SHIFT+F (Find in fi ...