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. Django的用户认证

    Django中用户登陆的实例: 逻辑流程 1.客户端发起请求,根据url规则会首先转至index函数, 2.在index函数上添加一个装饰器('@login_required',django自带).加 ...

  2. ubuntu 操作系统相关操作

    查看操作系统位数 命令:  getconf LONG_BIT root@hbg:/# getconf LONG_BIT 64 查看操作系统信息 命令: lsb_release -a root@hbg: ...

  3. Java Timer及TimerTarsk(摘自网络)

    Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务. 这种方式可以让程序按照某一个频度执行,但不能指定时间运行.用的较少.任务的调用通过起的子线程进 ...

  4. 洛谷-A+B Problem-洛谷的第一个任务

    题目描述 Description 输入两个整数a,b,输出它们的和(a,b<=10^9)  输入输出格式 Input/output 输入格式:两个整数以空格分开输出格式:一个数  输入输出样例  ...

  5. A - Space Elevator(动态规划专项)

    A - Space Elevator Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  6. AFNetWoring导入报错解决方案

    第一个当报cannot find interface declaration for 'UIImage或者use of undeclared identifier 'UIImage'时我们要在报错页面 ...

  7. win8.1去掉鼠标右键回收站“固定到开始”屏幕的方法

    平台:win8.1 问题:桌面“回收站”右键菜单里有个“固定到开始屏幕”,一不小心就误按,设法删除之. 打开注册表编辑器.在注册表编辑器里面定位到:HKEY_LOCAL_MACHINE\SOFTWAR ...

  8. uploadifive源码学习

    一.简介 Uploadify是一个基于JQuery的多文件上传JS组件,高度定制,两个版本可供选择.flash版本在最新的Safari等不再支持flash的浏览器或者一些手机浏览器中就无法正常的加载使 ...

  9. 学习笔记——解释器模式Interpreter

    解释器模式,其实就是编译原理中的语法解释器,如果用在项目中,可以用于实现动态脚本的解析,也就是说项目可以支持用户脚本扩展. 但实际上,这种运行时解释,效率很慢,如果不是很需要的话,不建议使用. 一种简 ...

  10. ios ViewController的生命周期分析和基本使用逻辑

    按结构可以对iOS的所有ViewController分成两类:1.主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITable ...