input

1<=n<=2000

a1 a2 ... an 1<=ai<=5*10e7

output

n行,第i行指切成i段,每段和的最大公约数的最大值

做法:环形数组切成n段,每段和的最大公约数肯定是总数的约数,然后只要求出每个约数对应的最大段数即可,即前缀和模d出现最多的次数

 #include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath> using namespace std; long long d[],a[];
int n,dn,k[]; void fac(long long x)
{
int m=sqrt(x)+0.5;
dn=;
for(int i=;i<=m;i++)
if(x%i==) d[dn++]=i;
for(int i=dn-;i>=;i--)
d[dn++]=x/d[i];
} /*//错的,不能保证最大
int findk(int idx)找到第一个出现重复的r,即出现了(r+nd)%d=r
{
long long r;
int i,k;
set<long long> q;
for(i=0;i<n;i++)
{
r=a[i]%d[idx];
if(!q.count(r)) q.insert(r);
else break;
}
i<n&&q.count(a[i]%d[idx])?k=2:k=1;
i++;
for(;i<n;i++)
if(a[i]%d[idx]==r) k++;
return k;
}
*/ const int HASH=;
int head[HASH],next[HASH],num[HASH];
long long st[HASH]; int insert(int s)
{
int h=st[s]%HASH;
int u=head[h];
while(u)
{
if(st[u]==st[s])
{
num[u]++;
return ;
}
u=next[u];
}
next[s]=head[h];
head[h]=s;
return ;
} int findk(int idx)//出现最多次的r的次数为该环切成最多段数能被d整除
{
memset(head,,sizeof(head));
int i,j,maxk=-;
for(i=,j=;i<n;i++)
{
st[j]=a[i]%d[idx];
//printf("st1 %lld\n",st[j]);
num[j]=;
if(insert(j)) j++;
}
for(int i=;i<j;i++)
if(num[i]>maxk) maxk=num[i];
return maxk;
} int main()
{
freopen("/home/user/桌面/in","r",stdin);
while(scanf("%d",&n)==)
{
scanf("%lld",&a[]);
for(int i=;i<n;i++)
{
scanf("%lld",&a[i]);
a[i]+=a[i-];
}
fac(a[n-]);
for(int i=;i<dn;i++)
k[i]=findk(i);
//for(int i=0;i<dn;i++) printf("the%d %lld %d\n",i+1,d[i],k[i]);
for(int i=;i<=n;i++)
for(int j=dn-;j>=;j--)
if(k[j]>=i)
{
printf("%lld\n",d[j]);
break;
}
}
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return ;
}

hiho1246(数学求模)的更多相关文章

  1. n对mod求模整除时转化成mod的数学式

    n对mod求模,它的值在0到mod-1之间,如果要求模整除的时候转化成mod可以用下面的式子: n = (n - 1 % mod + mod) % mod +1 这里先减一,模上mod再加一,这样如果 ...

  2. 【转】C/C++求模求余运算符——2013-08-20

    http://blog.csdn.net/whealker/article/details/6203629 求模运算符(%),或称求余运算符,也就是数学上所谓的除法中的余数,%两侧均应为整数, |小| ...

  3. NYOJ-676小明的求助,快速幂求模,快速幂核心代码;

    小明的求助 时间限制:2000 ms  |  内存限制:65535 KB 难度:2 描述 小明对数学很有兴趣,今天老师出了道作业题,让他求整数N的后M位,他瞬间感觉老师在作弄他,因为这是so easy ...

  4. 【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题

    最近再次复习C++语言,用的教材是<C++ Primer>这本教材, 看到第二章的时候,里面有个问题困扰了我. 于是想上网查查怎么回事, 结果看了很久都没有得到一个满意的答案. 书上有这么 ...

  5. 求余VS求模--C语言中表述

    之前看帖子,发现许多时候基本上大家都把求模和求余混为一谈了.但实际上二者的概念是有区别的   1. 求余 在C语言中,求余对应的操作符是%,且a%b求余的最后结果总是与a符号相同,最后的数值为|a|% ...

  6. eq相等 ne、neq不相等, gt大于, lt小于 gte、ge大于等于 lte、le 小于等于 not非 mod求模 等

    eq相等   ne.neq不相等,   gt大于, lt小于 gte.ge大于等于   lte.le 小于等于   not非   mod求模   is [not] div by是否能被某数整除   i ...

  7. NYOJ-102 次方求模 AC 分类: NYOJ 2014-02-06 18:53 184人阅读 评论(0) 收藏

    地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=102 //a^b mod c=(a mod c)^b mod c很容易设计出一个基于二分的递归 ...

  8. 大数求模 sicily 1020

        Search

  9. UVA 11174 Stand in a Line (组合+除法的求模)

    题意:村子里有n个人,给出父亲和儿子的关系,有多少种方式可以把他们排成一列,使得没人会排在他父亲的前面 思路:设f[i]表示以i为根的子树有f[i]种排法,节点i的各个子树的根节点,即它的儿子为c1, ...

随机推荐

  1. ckplayer 项目实战

    <div class="control-group" id="videoDiv" style="display: none;"> ...

  2. javascript获取css中的样式值

    <body> <input type="button" id="btn" value="启动"/> <img ...

  3. hdu_5950_Recursive sequence(矩阵快速幂)

    题目链接:hdu_5950_Recursive sequence 题意:递推求解:F(n) = 2*F(n-2) + F(n-1) + n4 和F(1) = a,F(2) = b: 题解: 一看数据范 ...

  4. Python之线程&进程

    线程: 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. thr ...

  5. ESFramework 通信框架安全机制的设计与实现

    在分布式通信系统中,安全无疑是非常重要的.ESFramework通信框架提供了哪些安全保障了?由于ESFramework通信框架是应用层的开发框架,那么本文我们只讨论ESFramework通信框架在应 ...

  6. python读取CSV文件

    python中有一个读写csv文件的包,直接import csv即可.利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下. 1. 读文件 csv_reader = csv.rea ...

  7. hdu 1210 Eddy's 洗牌问题

    Problem Description Eddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1,2,3..n,n+1,..2n.这也是 ...

  8. 查看mms UA/profile

    查看彩信的UA/profile信息,当然可以通过打印log来看. 但还有一个比较简便的方法: 直接抓取一个MMS包,用网络包分析工具打开,找到承载该MMS信息的HTTP协议包即可查看:

  9. js 中创建对象

    对象是什么 从JavaScript定义上讲对象是无序属性的集合,其属性可以包含基本值.对象或函数.也就是说对象是一组没有特定顺序的属性,每个属性会映射到一个值上,是一组键值对,值可以是数据或对象. 最 ...

  10. CentOS7 emacs安装

    首先安装依赖库 依赖库:   yum install gcc*   yum install glib*   yum install gtk*   yum install ncurses*   yum ...