题解:

保存每个1的位置。然后记录1的总个数cnt,如果存在一个k使得这个k是每个集合的倍数,那么为了使操作次数最小,这个k应该是cnt的质因子。(因为都是每个集合的数目1,使每个集合的数目变为2需要的次数一定小于使每个集合数目变为4需要的次数)

枚举cnt的质因子x,即x个1构成一个新的集合。构成新集合的时候要是两边的1往中间凑(中位数)。剩下的就暴力。。。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1e18+;
const ll N=1E5+;
ll arr[N];
vector<ll >ve;
ll cal(ll x){
ll sum=;
ll x1=x/;
for(ll i=;i<ve.size();i+=x){
for(ll j=i;j<i+x1;j++){
sum+=ve[i+x1]-ve[j];
}
for(ll j=i+x-;j>i+x1;j--){
sum+=ve[j]-ve[i+x1];
}
}
return sum;
}
void solve(){
ll n;
cin>>n;
ll cnt=;
for(ll i=;i<=n;i++){
cin>>arr[i];
if(arr[i]){
cnt++;
ve.push_back(i);
}
}
if(cnt==||n==){
cout<<-<<endl;
return ;
}
ll m=sqrt(cnt);
ll sum=INF;
for(ll i=;i<=m;i++){
if(cnt%i==){
sum=min(sum,cal(i));
while(cnt%i==) {
cnt/=i;
}
}
}
if(cnt!=){
sum=min(sum,cal(cnt));
}
cout<<sum<<endl;
return ;
}
int main(){
solve();
return ;
}

最新文章

  1. MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)
  2. 数据库表转javaBean
  3. 攻城狮在路上(壹) Hibernate(七)--- 通过Hibernate操纵对象(下)
  4. csharp: get Web.Services WebMethod
  5. JNI 回调小记
  6. ubuntu下使用apt-get install安装的软件在哪个目录
  7. 魔兽世界私服Trinity,从源码开始
  8. ExtJs之FieldSet和FieldContainer
  9. Oracle 数据库基本操作——表操作:查询
  10. Silverlight 结合ArcGis 使用inforwindow
  11. 【线段树】【3-21个人赛】【同样的problemB】
  12. 背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid
  13. class的二般用法
  14. 教你如何把openfire的muc聊天室改造为群
  15. Linux下如何查看系统启动时间和运行时间(转)
  16. 确界原理 supremum and infimum principle 戴德金定理 Dedekind theorem
  17. c++hook全局触控事件
  18. linux 命令 随笔
  19. Web(click and script) 与 Web(HTTP/HTML)协议区别
  20. [javaSE] 变量的传值与传址

热门文章

  1. DOM中获取元素的节点兼容IE6-8封装,带jquery源码分析children
  2. 记录一些服务端术语和搭建web服务器
  3. 运行docker大致流程
  4. Git使用的一些问题:.gitignore规则不生效、git同步代码至github和gitee
  5. HOOK相关原理与例子
  6. js数据类型及方法
  7. Pytest系列(4) - fixture的详细使用
  8. Blazor入门笔记(1)-从0构建一个组件
  9. Docker Swarm 资源管理
  10. 使用IDEA创建SpringBoot项目