题意:

  有一个环形序列,可以将其切成连续的k段子序列,那么gcd( 每段子序列的和 )就是优美程度。输出n个整数,表示当k=[1, n] 时的最大优美程度。

思路:

  观察一下,当切成1段的时候,gcd就是sum[整个序列],为最大。考虑切成2段,那么最好就是能让这个环切成2段和为sum[整个序列]/2的子序列了。考虑切成3段,那么最好就是能让这个环切成3段和为sum[整个序列]/3的子序列了。继续下去,这不就是求sum[整个序列]的约数吗?

  假设约数有k个,从大到小分别为factor[1~R]。那么其中有些因数是可能组不成的,得去掉那些组不成的。假设sum[整个序列]最多能切成cnt段和为factor[t]的连续子序列,那么段数i<=cnt的,答案都是factor[t]了,取最大即可。

  问题在于如何求出切成长为factor[t]的最多段数cnt[t]?当前缀和pre%factor=r出現了m次時应该是这样的: ..|xxxx|xxxx|......|xxx|xxxx|.. (共有m个切口|),观察到除了首尾之外,其他每段都是d的倍数,且首尾之和也是d的倍数(因为sum[整个序列]=k*d)。那么对于factor[t],只需要枚举r来求出最大的m即可。

 #include<bits/stdc++.h>
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=;
vector<LL> factor, cnt;
LL a[N];
map<LL,LL> mapp;
int main()
{
freopen("input.txt","r",stdin);
int n;
while(~scanf("%d",&n))
{
for(int i=; i<=n; i++)
{
scanf("%lld",&a[i]);
a[i]+=a[i-];
}
for(LL i=; i*i<=a[n]; i++)
{
if(a[n]%i==)
{
factor.push_back(a[n]/i);
factor.push_back(i);//多一个也不影响结果
}
}
sort(factor.begin(),factor.end());
deque<LL> ans;
for(int k=factor.size()-,i=; k>=; k--)
{
LL big=, c=factor[k];
mapp.clear();
for(int j=; j<=n; j++)
big=max(big,++mapp[a[j]%c]);
while(i<=n&&big>=i)
{
ans.push_back(c);
i++;
}
}
while(!ans.empty())
{
printf("%lld\n",ans.front());
ans.pop_front();
}
}
return ;
}

AC代码

hihoCoder #1246 : 王胖浩与环 (数学)的更多相关文章

  1. hihoCoder #1246 王胖浩与环

    题目大意 $n$($1\le n\le 2000$)个正整数 $a_1, a_2, \dots, a_n$($a_i\le 5\times 10^7$)分布在一个圆环上. 定义 $b_k$ 为:将环上 ...

  2. HihoCoder 1246:王胖浩与环

    #1246 : 王胖浩与环 时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 王胖浩有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字. 对 ...

  3. HihoCoder 1245:王胖浩与三角形 三角形边长与面积

    #1245 : 王胖浩与三角形 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 王胖浩有一个三角形,三边长为a,b,c.他有特殊的能力,能增加三条边的边长,增加的总长度不能 ...

  4. POJ 2359 Questions(约瑟夫环——数学解法)

    题目链接: http://poj.org/problem?id=2359 题意描述: 输入一个字符串 按照下面的规则,如果剩下的最后一个字符是'?',输出"Yes",如果剩下的最后 ...

  5. HihoCoder - 1789:阶乘问题 (简单数学)

    描述 给定 n, k,求一个最大的整数 m,使得 km 是 n! 的约数 输入 第一行两个正整数 n, k 2 ≤ n,k ≤ 109 输出 输出最大的 m 样例输入 5 2 样例输出 3 思路:我们 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. C#编写的通过汉字得到拼音和五笔码

    public static class SpellAndWbConfig { #region 变量声明 // XML文件读取实例 /// <summary> /// XML文件读取实例 / ...

  8. .net 生成拼音码与五笔码

    首先加入配置文件: <?xml version="1.0" encoding="utf-8" ?> <CodeConfig> <S ...

  9. hibernate一对一主键双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

随机推荐

  1. 【转】Session ID/session token 及和cookie区别

    Session + Cookie  知识收集! cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决 ...

  2. tomcat 下虚拟机部署导致应用filter失效的问题

    遇到一个困扰我两天的问题 服务器的tomcat上面挂了3个项目 1个项目在D:\tomcat\\webapps\ROOT下  运行正常 1个项目在D:\heyefan下 运行正常 1个项目在D:\MA ...

  3. java版复利计算

    这是我修改为java的初定界面,还有很多细节问题还没有解决,希望老师可以给我多点的点评,接下来继续努力,我会把每一次的进步发上来,不断的去锻炼. 1.我所用的开发工具是ecipse 2.所有的语言为j ...

  4. 把Angular中的$http变成jQuery.ajax()一样,可以让后台(php)轻松接收到参数

    最近接到一个手机项目,我决定用ionic + php + mysql来实现.ionic是一个前端框架,主要用于手机端,它融合了html5.css3.angularJS于一体,用起来很顺手. 开始构建项 ...

  5. CSU 1160 A(Contest #3)

    Description 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的 ...

  6. NOP初学记录

    1.  介绍的话不多说了.直接先来简单的安装跟配置先以3.6版本为例: 附带官网地址: http://www.nopcommerce.com   自行下载. 中文网:http://www.nopchi ...

  7. javaweb之Cookie篇

    Cookie是在浏览器访问某个Web资源时,由Web服务器在Http响应消息头中通过Set-Cookie字段发送给浏览器的一组数据. 一个Cookie只能表示一个信息对,这个信息对有一个信息名(Nam ...

  8. 【转发】Linux下清除系统日志方法

    摘要:相信大家都是用过Windows的人.对于Windows下饱受诟病的各种垃圾文件都需要自己想办法删除,不然你的系统将会变得越来越大,越来越迟钝!windows怎么清理垃圾相信大家都知道的,那么li ...

  9. js中获取项目路径的小插件

    //立即执行的js (function() { //获取contextPath var contextPath = getContextPath(); //获取basePath var basePat ...

  10. SharePoint 跨域还原网站一则

    博客地址:http://blog.csdn.net/foxdave 源端:执行PowerShell命令备份网站集 Backup-SPSite http://server_name/sites/site ...