传送门

文章目录

  • 题意:
  • 思路:

题意:

大体题意跟easyeasyeasy版本差不多,就是hardhardhard版本的aaa范围更大。见这里Codeforces Round #601 (Div. 2)

思路:

首先还是考虑质因子分解,因为一个数被分成以xyxyxy为一组一定不如分成xxx组或者yyy组,所以只需要以质因子分组就好啦。
让后贪心的考虑,假设当前质因子为basebasebase,那么我们肯定是把当前这个数的a[i]modbasea[i]\bmod basea[i]modbase给a[i+1]a[i+1]a[i+1]或者从a[i+1]a[i+1]a[i+1]获得base−a[i]modbasebase-a[i]\bmod basebase−a[i]modbase,这样就可以忽略前面的数,把a[i+1]a[i+1]a[i+1]当成第一个数。那么第一个式子列出来就是a[i+1]=(a[i+1]+a[i])modbasea[i+1]=(a[i+1]+a[i])\bmod basea[i+1]=(a[i+1]+a[i])modbase,第二个式子列出来就是a[i+1]=(a[i+1]−(base−a[i]modbase))modbasea[i+1]=(a[i+1]-(base-a[i]\bmod base))\bmod basea[i+1]=(a[i+1]−(base−a[i]modbase))modbase,让后化简一下就是a[i+1]=(a[i+1]+a[i])modbasea[i+1]=(a[i+1]+a[i])\bmod basea[i+1]=(a[i+1]+a[i])modbase,让后这样递推下去就好啦。对于每个数我们只需要两种情况取minminmin即可,也就是min(pre,base−pre)min(pre,base-pre)min(pre,base−pre),preprepre为模basebasebase情况下的前缀和。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int a[N];
LL sum,ans=1e18;void solve(LL base)
{LL as=0,pre=0;for(int i=1;i<=n;i++) pre=(pre+a[i])%base,as+=min(pre,base-pre);ans=min(ans,as);
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]),sum+=a[i];if(sum==1) { puts("-1"); return 0; }for(LL i=2;i<=sum/i;i++)if(sum%i==0){solve(i);while(sum%i==0) sum/=i;}if(sum>1) solve(sum);cout<<ans<<endl;return 0;
}
/**/

Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version) 思维 + 质因子相关推荐

  1. Codeforces Round #601 (Div. 2)

    传送门 文章目录 A.Changing Volume 题意: 思路: B. Fridge Lockers 题意: 思路: C. League of Leesins 题意: 思路: D. Feeding ...

  2. 【CodeForces 1255E1 --- Send Boxes to Alice [Easy Version]】

    [CodeForces 1255E1 --- Send Boxes to Alice [Easy Version]] Description This is the easier version of ...

  3. Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串sss,你有两个操作可以使用: (1)(1)(1)从sss的结尾删除一个字母. (2)s=s+s(2)s=s+s(2)s=s+s. 让 ...

  4. Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理

    传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...

  5. Codeforces Round #741 (Div. 2) D2. Two Hundred Twenty One (hard version) 前缀和 + 分段模型

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串,+++代表111,−-−代表−1-1−1,让后有qqq个询问,每次询问[l,r][l,r][l,r]区间,将这段区间的数拿出来,设为 ...

  6. Codeforces Round #730 (Div. 2) D2. RPD and Rap Sheet (Hard Version) 交互 + k进制的转换

    传送门 文章目录 题意: 思路: 题意: 定义a⊕kba\oplus_k ba⊕k​b为a,ba,ba,b在kkk进制下的不进位加法.系统会随机生成一个数xxx,你猜这个数,假设当前猜的数为yyy,如 ...

  7. Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力

    传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 首先关注到rrr从[2,n][2,n][2,n]都出现一次,所以很明显最后一个位置只出现一次,但是这样倒着来不是很 ...

  8. Codeforces Round #601 (Div. 2)D. Feeding Chicken,二维压一维,几何平面的分配

    D. Feeding Chicken 题目大意:就是给你一个r∗cr*cr∗c的矩阵,矩阵上若干个位置上有食物,你有k只小鸡,你要将这r∗cr*cr∗c的矩阵分成k个联通块给每个小鸡,使得有最大食物的 ...

  9. Codeforces Round #828 (Div. 3) E2. Divisible Numbers (hard version)

    翻译: 这是这道题的难解版.简单版本和硬版本之间的唯一区别是对

最新文章

  1. nginx 没有cookie_Nginx灰度升级实现说明
  2. linux redis 配置详解
  3. 各种操作系统ping时的TTL值
  4. wmsys.WM_CONCAT
  5. kali修改root密码
  6. 概率图模型的d-separation概念
  7. 网络带宽与实际上传下载速度之间关系
  8. 计算机组成原理完整学习笔记(六):指令系统
  9. cpc客户端上传文件服务器拒收,cpc客户端服务器拒收
  10. SkeyePlayer RTSP/RTMP低延迟播放器源码解析系列之效率优化方案
  11. 为什么要去学习函数式编程
  12. 服务器被入侵了,怎么防范服务器被黑客入侵情况
  13. Java获取当前电脑的ip地址
  14. mysql ndb同步_MySQL NDB Cluster 7.5.16 部署OGG同步
  15. Redis7.0的安装步骤
  16. DIV+CSS布局之圣杯布局与双飞翼布局
  17. 阿里云推出高效病毒基因序列检索功能,它的底层逻辑原来是这样的
  18. 仿果壳网手机登陆界面源代码
  19. 创建添加学生信息的vue实例
  20. AMBA-AXI协议

热门文章

  1. 为什么要在沙河中设置小堤坝?
  2. 微信又添新功能!这个微信群可以学英语,而且全程免费
  3. 10个舍不得删的高质量公号
  4. 讲100个科学道理,不如做这些有趣的理科实验!
  5. java编写算术平均数,[求助]基础-怎样编一个计算算术平均数的程序(急啊)
  6. 专升本c语言网课听谁的好_都说塑钢泥比玻璃胶好,填缝永不变黑,师傅却说不好用,听谁的?...
  7. mysql表空间权限_MySQL InnoDB表空间加密示例详解
  8. java 代码块 作用_Java核心(三):代码块的作用
  9. vue 插入word模板 项目_10 分钟为你的 vue 项目编写代码文档
  10. 计算机网络实验arp协议分析,计算机网络ARP地址协议解析实验报告