HihoCoder 1246:王胖浩与环
#1246 : 王胖浩与环
- 样例输入
-
7
2 3 3 3 3 3 3 - 样例输出
-
20
5
2
2
1
1
1
描述
王胖浩有一个环,环上有n个正整数。他有特殊的能力,能将环切成k段,每段包含一个或者多个数字。
对于一个切分方案,王胖浩将以如下方式计算优美程度,
首先对于每一段,求出他们的数字和。然后对于每段的和,求出他们的最大公约数,即为优美程度。
他想通过合理地使用他的特殊能力,使得切分方案的优美程度最大。
输入
第一行一个整数n,表示环上的数字个数。
接下来一行包含n个正整数,第i个数ai表示环上第i个数。
数据范围:
1<=n<=2000,1<=ai<=5*107
输出
输出n行,第i行表示切成i段时的最大优美程度。
官方题解:首先d一定是所有数总和的约数,这样的数并不多。接着判断一个d是否可能为k段和的约数,只要将前缀和按模d分类即可,看相同的个数是否大于等于k。
又学到了新姿势。。。一堆数的公共约数,实际上一定在 这堆数和 的约数里面找。因为很简单的道理,a%x=0 b%x=0,(a+b)是肯定%x=0的。
然后就是将约数从大到小排序,看它们在前缀和里面出现的次数,这里的做法也感觉太亮了。果然自己做题还是太少了啊。。。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#pragma warning(disable:4996)
using namespace std; typedef long long ll; ll n;
ll val[2005];
ll num[5000];
ll ans[2005]; int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout); ll i, j, nu;
scanf("%lld", &n); val[0] = 0;
for (i = 1; i <= n; i++)
{
scanf("%lld", val + i);
val[i] = val[i - 1] + val[i];
}
sort(val + 1, val + n + 1); nu = 0;
for (i = 1; i *i <= val[n]; i++)
{
if (val[n] % i==0)
{
if (i*i == val[n])
{
num[nu++] = i;
continue;
}
num[nu++] = i;
num[nu++] = val[n] / i;
}
}
sort(num, num + nu); ll temp, k, m;
k = 1;
for (i = nu - 1; i >= 0; i--)
{
temp = num[i];
map<ll, ll>cnt;
m = 0;
for (j = 1; j <= n; j++)
{
m = max(m, ++cnt[val[j] % temp]);
}
while (k <= m)
{
ans[k] = temp;
k++;
}
}
for (i = 1; i <= n; i++)
{
printf("%lld\n", ans[i]);
}
//system("pause");
return 0;
}
HihoCoder 1246:王胖浩与环的更多相关文章
- hihoCoder #1246 : 王胖浩与环 (数学)
题意: 有一个环形序列,可以将其切成连续的k段子序列,那么gcd( 每段子序列的和 )就是优美程度.输出n个整数,表示当k=[1, n] 时的最大优美程度. 思路: 观察一下,当切成1段的时候,gcd ...
- hihoCoder #1246 王胖浩与环
题目大意 $n$($1\le n\le 2000$)个正整数 $a_1, a_2, \dots, a_n$($a_i\le 5\times 10^7$)分布在一个圆环上. 定义 $b_k$ 为:将环上 ...
- HihoCoder 1245:王胖浩与三角形 三角形边长与面积
#1245 : 王胖浩与三角形 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 王胖浩有一个三角形,三边长为a,b,c.他有特殊的能力,能增加三条边的边长,增加的总长度不能 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- C#编写的通过汉字得到拼音和五笔码
public static class SpellAndWbConfig { #region 变量声明 // XML文件读取实例 /// <summary> /// XML文件读取实例 / ...
- .net 生成拼音码与五笔码
首先加入配置文件: <?xml version="1.0" encoding="utf-8" ?> <CodeConfig> <S ...
- hibernate一对一主键双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- display: inline-block 的神奇效果
先上要实现的效果图: 方案一:来自卢兄: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- hihocoder 1174 [BFS /拓扑排序判断是否有环]
hihocoder 1174 [算法]: 计算每一个点的入度值deg[i],这一步需要扫描所有点和边,复杂度O(N+M). 把入度为0的点加入队列Q中,当然有可能存在多个入度为0的点,同时它们之间也不 ...
随机推荐
- 解决IDEA部署web项目时,jar包拷贝不全的问题
原因 先前已部署过,输出目录有lib文件夹. 再次部署时,IDEA一检测,发现输出目录已经存在lib文件夹,认为已经拷贝过了,为节省时间,不再重新拷贝jar包,殊不知我们新添加了jar包. 于是我们新 ...
- Vagrant 安装使用
先安装虚拟机 https://www.virtualbox.org/ 再安装 https://www.vagrantup.com/ 1.nginxhttp://nginx.org/download/ ...
- 多数据库:SQLHelper
//=============================================================================== // This file is ba ...
- Django中的prefetch_related()函数优化
对于多对多字段(ManyToManyField)和一对多字段, 可以使用prefetch_related()来进行优化 prefetch_related()和select_related()的设计目的 ...
- KVM的客户机可以使用的存储
KVM的虚拟机可以直接使用宿主机器内的存储设备,比如可以把宿主机器内的硬盘直接暴露给 虚拟机挂载使用 -hda /dev/sfa(宿主机的设备文件) 还可以把镜像文件挂接到虚拟机,作为虚拟机的存储设备 ...
- 1 Struts2基本概述及其入门
什么是Struts2? webwork+Struts1 一个基于MVC设计模式的web层框架,本质上相当于一个Servlet.. 在MVC设计模式中,Struts2作为控制器Controller来建立 ...
- Codeforces Round #594 (Div. 2) - C. Ivan the Fool and the Probability Theory(思维)
题意:给n*m的网格涂黑白两种颜色,保证每个格子上下左右的四个格子中最多只有一个格子与自己颜色相同,问有多少种涂法?结果$mod1000000007$ 思路:先只考虑一行有多少种涂法 $dp[i][0 ...
- Java - 实现双向链表
熟悉一下Java... package ChianTable; import java.util.Scanner; /** * Created by Administrator on 2018/3/2 ...
- 「CF1023F」Mobile Phone Network
「CF1023F」Mobile Phone Network 传送门 直接钦定那 \(k\) 条边在最小生成树中,然后把最小生成树树剖一下. 每条其它边的效果就是把该边端点路径上的边的权对该边边权取 \ ...
- 表格中td限宽溢出以省略号代替
table.ms-listviewtable { table-layout:fixed; width: 100%; } table.ms-listviewtable td[role="gri ...