E1.Send Boxes to Alice(Easy Version)//中位数
发送盒子给Alice(简单版本)##
题意:准备n个盒子放巧克力,从1到n编号,初始的时候,第i个盒子有ai个巧克力。
Bob是一个聪明的家伙,他不会送n个空盒子给Alice,换句话说,每个盒子里面都有巧克力。
Alice不喜欢互质集,如果这里存在一个整数k > 1,每个盒子里的巧克力数量都能被k整除,那么Alice会很高兴。
Alice不介意这里有空盒子。
每次操作可以把一个盒子里的巧克力放置在相邻两个盒子里,即第i个盒子里的巧克力可以放在第i + 1和i - 1盒子里。
如果这里没有方法使得Alice高兴,就打印-1。
求最小的操作次数。
分析:如何确定具体的k?
一:我们可以枚举k,k从1到sum
二:如何求具体的操作次数,显然我们可以把所有的巧克力分成好几段,能被k整除,如果存在一段x * k,虽然能被整除,但是所需要移动的巧克力就更多了。
三:我们每段组合k个巧克力,移动的时候,把所有的数往中间移动,所需要移动的次数最少。(中位数的性质)
从一二可以得出,k是sum的质因子,所以我们只需要枚举质因子就可以了
假设中位数位置为median 每个巧克力的位置为ai,那么总共的操作次数为C = |a1 - median| + |a2 - median| +...+ |ai-1 - median| + |ai - median|
//货仓选址
当长度i为奇数时,中点在(i + 1) / 2时最优,当长度i为偶数时,中点在i / 2 ~ i / 2 + 1任意两个位置即可
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 100005;
int n;
int a[N];
vector<int> v;
long long cost(int p)
{
long long res = 0;
for (int i = 0; i < v.size(); i += p)
{
int mid = v[(i + i + p - 1) / 2];
for (int j = i; j < i + p; ++j)
res += abs(v[j] - mid);
}
return res;
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
if (a[i] == 1)
v.push_back(i);//每个1的位置
}
if (v.size() == 1)
{
puts("-1");
return 0;
}
long long ans = 1e20;
int tmp = v.size(), k = 2;//枚举k
while (k * k <= tmp)
{
if (tmp % k == 0)
{
ans = min(ans, cost(k));
while (tmp % k == 0)
tmp /= k;
}
++k;
}
if (tmp > 1)
ans = min(ans, cost(tmp));
printf("%I64d\n", ans);
return 0;
}
E1.Send Boxes to Alice(Easy Version)//中位数的更多相关文章
- E1. Send Boxes to Alice (Easy Version)
题解: 保存每个1的位置.然后记录1的总个数cnt,如果存在一个k使得这个k是每个集合的倍数,那么为了使操作次数最小,这个k应该是cnt的质因子.(因为都是每个集合的数目1,使每个集合的数目变为2需要 ...
- Codeforces Round #601 (Div. 2) E1 Send Boxes to Alice (Easy Version)
#include <bits/stdc++.h> using namespace std; typedef long long ll; ; int a[N]; int n; bool pr ...
- Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version)
Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version) N个盒子,每个盒子有a[i]块巧克力,每次操作可以将盒子中的 ...
- Codeforces1254B2 Send Boxes to Alice (Hard Version)(贪心)
题意 n个数字的序列a,将i位置向j位置转移x个(a[i]-x,a[j]+x)的花费为\(x\times |i-j|\),最终状态可行的条件为所有a[i]均被K整除(K>1),求最小花费 做法 ...
- E2. Send Boxes to Alice (Hard Version)
秒的有点难以理解:https://blog.csdn.net/weixin_42868863/article/details/103200132 #include<bits/stdc++.h&g ...
- Send Boxes to Alice
E. Send Boxes to Alice 首先求出每一个位置的前缀和. 对答案进行复杂度为\(\sqrt{a[n]}\)的遍历,因为最后的答案不可能大于\(\sqrt{a[n]}\) for(ll ...
- Codeforces 1255E Send Boxes to Alice(前缀和+枚举+数论)
我们考虑前缀和sum[i],如果将a[i+1]中的一个塞入a[i]中,则不影响sum[i+1],但是sum[i]++,如果将a[i]中的一个塞入a[i+1],则不影响sum[i+1],但是sum[i] ...
- E1. String Coloring (easy version)(贪心)
E1. String Coloring (easy version) time limit per test 1 second memory limit per test 256 megabytes ...
- Numerical Sequence (easy version)
http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...
随机推荐
- CentOS安装图解(在VMware 8上安装)
近期准备学习一下CentOS,打算先在VMware上装一个用于初步了解. 整体步骤如下: 一.获取CentOS安装镜像.可以从以下几个地方获取,顺便提一句,我是从163下载的. 1.CentOS的官方 ...
- containerd 与安全沙箱的 Kubernetes 初体验
作者 | 易立 阿里云资深技术专家 containerd 是一个开源的行业标准容器运行时,关注于简单.稳定和可移植,同时支持 Linux 和 Windows. 2016 年 12 月 14 日,Do ...
- 用maven创建web项目(spring Mvc)
用maven创建web项目(spring Mvc) 1.打开cmd进入到你要创建maven项目的目录下: 2.输入以下命令.然后根据提示输入相应的groupId.artifactId.version: ...
- 半自动安装 linux 系统
基于图形软件生成应答文件,实现半自动化安装 linux 操作系统 1.yum install -y system-config-kickstart 安装生成自动化安装操作系统的应答文件 2.syste ...
- root权限后,不要忘了还有selinux
下面的例子运行在中兴android 5.0手机上. 当我们使用root权限的python去创建socket监听端口8088时,selinux向kmsg输出了下面的记录 python-android5 ...
- 机器学习 TensorFlow 实现智能鉴黄
前言 最近在做一款图床服务,关注公号的小伙伴一定记得小柒曾说过,会在周末放出的,不好意思放大家鸽子了.之所以一直没敢放出,是因为鉴黄接口一直没调试好,虽然我对公号的小伙伴百分之百信任,奈何互联网鱼龙混 ...
- C#音频截取与原文匹配
1.需求 上传一个音频文件(例如英语听力的音频)与音频对应的原文word文档.大概估算音频中一段对话到另一端对话的时间间隔,将音频截取为不同对话的小音频文件,通过百度语音识别转换成英文,然后与原文对比 ...
- 5. 彤哥说netty系列之Java NIO核心组件之Channel
你好,我是彤哥,本篇是netty系列的第五篇. 简介 上一章我们一起学习了如何使用Java原生NIO实现群聊系统,这章我们一起来看看Java NIO的核心组件之一--Channel. 思维转变 首先, ...
- Mysql数据库调优和性能优化的21条最佳实践
Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...
- Linux上ES单机版安装
设置 IP 地址 vi /etc/sysconfig/network-scripts/ifcfg-ens32 重启网卡 [root@localhost ~] systemctl restart n ...