Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version) 思维 + 质因子
传送门
文章目录
- 题意:
- 思路:
题意:
大体题意跟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) 思维 + 质因子相关推荐
- Codeforces Round #601 (Div. 2)
传送门 文章目录 A.Changing Volume 题意: 思路: B. Fridge Lockers 题意: 思路: C. League of Leesins 题意: 思路: D. Feeding ...
- 【CodeForces 1255E1 --- Send Boxes to Alice [Easy Version]】
[CodeForces 1255E1 --- Send Boxes to Alice [Easy Version]] Description This is the easier version of ...
- 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. 让 ...
- Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理
传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...
- Codeforces Round #741 (Div. 2) D2. Two Hundred Twenty One (hard version) 前缀和 + 分段模型
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串,+++代表111,−-−代表−1-1−1,让后有qqq个询问,每次询问[l,r][l,r][l,r]区间,将这段区间的数拿出来,设为 ...
- Codeforces Round #730 (Div. 2) D2. RPD and Rap Sheet (Hard Version) 交互 + k进制的转换
传送门 文章目录 题意: 思路: 题意: 定义a⊕kba\oplus_k ba⊕kb为a,ba,ba,b在kkk进制下的不进位加法.系统会随机生成一个数xxx,你猜这个数,假设当前猜的数为yyy,如 ...
- Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力
传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 首先关注到rrr从[2,n][2,n][2,n]都出现一次,所以很明显最后一个位置只出现一次,但是这样倒着来不是很 ...
- Codeforces Round #601 (Div. 2)D. Feeding Chicken,二维压一维,几何平面的分配
D. Feeding Chicken 题目大意:就是给你一个r∗cr*cr∗c的矩阵,矩阵上若干个位置上有食物,你有k只小鸡,你要将这r∗cr*cr∗c的矩阵分成k个联通块给每个小鸡,使得有最大食物的 ...
- Codeforces Round #828 (Div. 3) E2. Divisible Numbers (hard version)
翻译: 这是这道题的难解版.简单版本和硬版本之间的唯一区别是对
最新文章
- nginx 没有cookie_Nginx灰度升级实现说明
- linux redis 配置详解
- 各种操作系统ping时的TTL值
- wmsys.WM_CONCAT
- kali修改root密码
- 概率图模型的d-separation概念
- 网络带宽与实际上传下载速度之间关系
- 计算机组成原理完整学习笔记(六):指令系统
- cpc客户端上传文件服务器拒收,cpc客户端服务器拒收
- SkeyePlayer RTSP/RTMP低延迟播放器源码解析系列之效率优化方案
- 为什么要去学习函数式编程
- 服务器被入侵了,怎么防范服务器被黑客入侵情况
- Java获取当前电脑的ip地址
- mysql ndb同步_MySQL NDB Cluster 7.5.16 部署OGG同步
- Redis7.0的安装步骤
- DIV+CSS布局之圣杯布局与双飞翼布局
- 阿里云推出高效病毒基因序列检索功能,它的底层逻辑原来是这样的
- 仿果壳网手机登陆界面源代码
- 创建添加学生信息的vue实例
- AMBA-AXI协议
热门文章
- 为什么要在沙河中设置小堤坝?
- 微信又添新功能!这个微信群可以学英语,而且全程免费
- 10个舍不得删的高质量公号
- 讲100个科学道理,不如做这些有趣的理科实验!
- java编写算术平均数,[求助]基础-怎样编一个计算算术平均数的程序(急啊)
- 专升本c语言网课听谁的好_都说塑钢泥比玻璃胶好,填缝永不变黑,师傅却说不好用,听谁的?...
- mysql表空间权限_MySQL InnoDB表空间加密示例详解
- java 代码块 作用_Java核心(三):代码块的作用
- vue 插入word模板 项目_10 分钟为你的 vue 项目编写代码文档
- 计算机网络实验arp协议分析,计算机网络ARP地址协议解析实验报告