#1246 : 王胖浩与环

时间限制:6000ms
单点时限:1000ms
内存限制:256MB

描述

王胖浩有一个环,环上有n个正整数。他有特殊的能力,能将环切成k段,每段包含一个或者多个数字。

对于一个切分方案,王胖浩将以如下方式计算优美程度,

首先对于每一段,求出他们的数字和。然后对于每段的和,求出他们的最大公约数,即为优美程度。

他想通过合理地使用他的特殊能力,使得切分方案的优美程度最大。

输入

第一行一个整数n,表示环上的数字个数。

接下来一行包含n个正整数,第i个数ai表示环上第i个数。

数据范围:

1<=n<=2000,1<=ai<=5*107

输出

输出n行,第i行表示切成i段时的最大优美程度。

样例输入
7
2 3 3 3 3 3 3
样例输出
20
5
2
2
1
1
1

官方题解:首先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:王胖浩与环的更多相关文章

  1. hihoCoder #1246 : 王胖浩与环 (数学)

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

  2. hihoCoder #1246 王胖浩与环

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

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

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

  4. bzoj AC倒序

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

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

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

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

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

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

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

  8. display: inline-block 的神奇效果

    先上要实现的效果图: 方案一:来自卢兄: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  9. hihocoder 1174 [BFS /拓扑排序判断是否有环]

    hihocoder 1174 [算法]: 计算每一个点的入度值deg[i],这一步需要扫描所有点和边,复杂度O(N+M). 把入度为0的点加入队列Q中,当然有可能存在多个入度为0的点,同时它们之间也不 ...

随机推荐

  1. 我的B站主页:https://space.bilibili.com/611212 内有视频题解

    我的B站主页:https://space.bilibili.com/611212 内有视频题解

  2. 了解Web的相关知识

    一.WWW基础 WWW(world wide web, 万维网)是Internet上基于客户端/服务器体系结构的分布式多平台的超文本超媒体信息服务系统.它利用超文本(hypertext).超媒体(hy ...

  3. Eclipse开发快捷键

    ctrl+alt+r:查找资源 ctrl+o:快速outLine ctrl+e:快速切换编辑器 ctrl+./ctrl+1:下一个错误修改

  4. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  5. Python环境搭建-2 编译器和解释器

    编译器与解释器 编译器/解释器:高级语言与机器之间的翻译官 都是将代码翻译成机器可以执行的二进制机器码,只不过在运行原理和翻译过程有不同而已. 那么两者有什么区别呢? 编译器:先整体编译再执行 解释器 ...

  6. Android FM模块学习之四源码解析(一)

    转自:http://blog.csdn.net/tfslovexizi/article/details/41516149?utm_source=tuicool&utm_medium=refer ...

  7. ash.jpg

  8. 一步一步配置docker(tomcat+jenkins+phpmyadmin+nginx)

    经过半个月的docker学习实践,今天对自己的学习成果做个总结. 貌似官方推荐的是docker compose使用DockerFile 来配置,但目前还没学习使用docker compose,先学习通 ...

  9. 什么是Device ID?

    Android ID用于唯一识别一部设备的一次刷机行为,虽然不能完全确定该设备的唯一性(真的唯一性是用IMEI号的),但是可以很大程度上过滤重复设备.这是移动互联网广告行业的基础,尤其是CPI广告,设 ...

  10. luogu P3356 火星探险问题

    本题很简单的费用流问题,有石头的点需要限制,那我们就可以拆点,capacity为1就可以限制,然后cost为-1,直接跑板子就可以了,注意输出的时候找残量网络的反向边