CF1305F Kuroni and the Punishment

CF1305F Kuroni and the Punishment

题意:

给定 n 个数。每次可以选择将一个数 +1 或 -1 。求至少多少次操作使得整个序列都是正数且全部元素的 gcd>1 。
n<=2e5,ai<=1012n<=2e5,a_{i}<=10^{12}n<=2e5,ai<=1012

题解:

首先不难想到,我们可以让所有数变成偶数,这样gcd为2,这样的话,每个数的操作次数小于等于1,这是答案的上界n,也就是最后的答案只会比n优,不可能比n劣
由上面这个结论我可以推出一个定理:在最终的方案中,指定存在至少一半的元素,他们最多被操作过一次
证明:如果存在一般元素被操作了超过一次,那么操作次数就是⌈n+12⌉∗2>n\lceil \frac{n+1}{2}\rceil*2>n2n+12>n,这超过了答案上界
所以,如果我们随机选任意元素,这个元素至少有12\frac{1}{2}21的概率被最多操作一次。对于数x最多操作一次,可以得到x-1,x,x+1,也就是x最终有这个三个形态。因为gcd要>=2,说明x-1/x/x+1的某个因子就是我们要找的答案,那我们直接因子分解,对于每个因子w去强行判断如果w是gcd所需要的操作次数,然后取min
为什么这样是对的?
我们刚才说了,操作次数小于等于1的概率是>=12\frac{1}{2}21的,所以我们随机选取k次,那么错误的概率就是12k\frac{1}{2^k}2k1
当k>=30时一般不会出错
还有随机不要用rand(),详细原因详见如何正确地生成一个随机数

代码:

#include<bits/stdc++.h>
using namespace std;
mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
typedef long long ll;
ll a[200005];
int n;
ll cal(ll x)
{ll ret=0;for (int i=0;i<n;i++){ll tmp=a[i]%x;if (a[i]!=tmp)ret+=min(tmp,x-tmp);elseret+=x-tmp;}return ret;
}ll fac(ll x)
{ll ret=1e18;ll en=sqrt(x+1ll);for(ll i=2;i<=en;i++){if (x%i==0){ret=min(ret,cal(i));while(x%i==0)x/=i;if (x==1)break;}}if (x>1)ret=min(ret,cal(x));return ret;
}
int main()
{   srand(time(0));cin>>n;for(int i=0;i<n;i++)scanf("%I64d",&a[i]);int T=50;ll ans=1e18;while (T--){ll pos=rnd()%n;if (a[pos]>2)ans=min(ans,fac(a[pos]-1ll));ans=min(ans,fac(a[pos]));ans=min(ans,fac(a[pos]+1ll));}cout<<ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019年了,C#发展的怎么样了呢?

C# 8.0我估计大多数程序员对于C# 5.0之后的改进都没有什么太多的认知&#xff0c;的确从C# 5.0开始C#已经没什么太多东西可以从其他语言借鉴&#xff0c;Anders的重心也开始逐步倾斜到TypeScript&#xff0c;所以从5.0引入async之后C#语言发展速度开始减缓了。C#6引入了大量的语…

微软宣布新命令行工具 Windows Terminal 和 WSL2

微软在 Build 2019 已经宣布推出名为Windows Terminal的新款命令行工具 , 这款工具可以访问多种环境的中心位置。例如可以直接访问PowerShell、CMD.EXE、Windows Linux子系统等等&#xff0c;开发者使用此工具可以简化工作。这款新工具支持多选项卡同时连接多个环境或服务器&a…

CF1305E Kuroni and the Score Distribution

CF1305E Kuroni and the Score Distribution 题意&#xff1a; 题解&#xff1a; 一开始想这个题&#xff0c;想法是一开始顺着填1&#xff0c;2&#xff0c;3…然后多删少补 如果1&#xff0c;2&#xff0c;3&#xff0c;4…这样顺延的填&#xff0c;对于akka_{k}kak​k可以…

微软 Build 2019:Windows 10 隐退,IE 重生,Azure 成主角

019 年 5 月 6 日&#xff0c;一年一度的微软 Build 开发者大会正式到来。作为本次大会最为重磅的 Keynote 环节&#xff0c;微软 CEO Satya Nadella 的开场演讲无疑展示了这家巨头对于未来科技发展趋势的洞察和判断&#xff0c;并且也能够让人更加清晰地看到微软在 Azure 云计…

牛客练习赛89

牛客练习赛89 题号题目知识点A牛牛吃米粒贪心B牛牛嚯可乐搜索C牛牛吃豆人思维D牛牛种小树思维完全背包E牛牛小数点思维推导F牛牛防疫情最小割

普通人看Build 2019 值得留心的亮点有哪些?

一场Keynote下来&#xff0c;是不是对纳德拉那套“Azure&#xff0c;azure&#xff0c;azure”&#xff0c;云云云的套路感觉有些乏味呢&#xff1f;当然这也不是你的问题&#xff0c;原本Build大会就是为开发者而设的&#xff0c;将近两个小时下来没看到什么能让自己眼前一亮的…

牛牛种小树

牛牛种小树 题意&#xff1a; 他打算用他得到的米粒去构造一棵有n个节点的树&#xff0c;并使得它的价值最大。 设f(d)表示树上度数为d的一个点能够获取的最大价值。则这棵树的价值为∑i1nf(di)\sum_{i1}^nf(d_{i})∑i1n​f(di​),其中did_{i}di​表示第i个点的度数 题解&am…

Build 2019:微软正式宣布 .NET 5

今天&#xff0c;我们宣布 .NET Core 3.0 之后的下一个版本将是 .NET 5 。这将是 .NET 系列的下一个重要版本。将来只会有一个 .NET &#xff0c;您将能够使用它来开发 Windows&#xff0c;Linux&#xff0c;macOS&#xff0c;iOS&#xff0c;Android&#xff0c;tvOS&#xff…

LGV定理

老早就听说&#xff0c;一直没学&#xff0c;今天遇到一个LGV比较裸的题&#xff0c;特地学习一下 选自oi-wiki 定义&#xff1a; e(u,v)表示u到v这条路径上所有边的边权之积(路径计数时&#xff0c;可以将边权都设为1),很多路径统计问题就是用到这一点 引理&#xff1a; 答案…

2019牛客多校Monotonic Matrix

Monotonic Matrix 题意&#xff1a; 问有多少个n * m的矩阵A满足一下情况&#xff1a;答案mod 1e97 矩阵A的所有元素∈{0,1,2}Ai,j<Ai1,jA_{i,j}<A_{i1,j}Ai,j​<Ai1,j​Ai,j<Ai,j1A_{i,j}<A_{i,j1}Ai,j​<Ai,j1​ 题解&#xff1a; 我们先看看这个式子…

WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发&#xff0c;是时候总结一下了。Caliburn.Micro(https://blog.csdn.net/lzuacm/article/details/78886436)是一个轻量级的WPF框架&#xff0c;简化了WPF中的不少用法&#xff0c;推荐做WPF开发时优先使用。真…

微软全都要!Win10引入真Linux内核

继将 Bash shell、原生 OpenSSH、WSL 引入 Windows&#xff0c;以及在微软商店提供 Ubuntu、SUSE Linux 和 Fedora 等发行版&#xff0c;正在举办的 Microsoft Build 2019 大会上&#xff0c;微软又宣布了一个重大的决定 —— 将完整的 Linux 内核引入 Windows 10。按照微软的说…

牛客练习赛89--牛牛防疫情

牛牛防疫情 题意&#xff1a; 牛牛用卖烤串赚的钱买了一款游戏&#xff0c;这款游戏的地图是一个 n*n 的网格&#xff0c;其中有 m 个地区存在感染源&#xff08;红色&#xff09;&#xff0c;其余地区为安全区&#xff08;白色&#xff09;。已知一个感染源可同时将与其相邻…

Kafka基本知识整理

首先Kafka是一个分布式消息队列中间件&#xff0c;Apache顶级项目&#xff0c;https://kafka.apache.org/ 高性能、持久化、多副本备份、横向扩展。生产者Producer往队列里发送消息&#xff0c;消费者Consumer从队列里消费消息&#xff0c;然后进行业务逻辑。应用场景主要有&…

牛客练习赛89——牛牛小数点(未解决)

牛牛小数点 题意&#xff1a; 题解&#xff1a; 本题先说结论&#xff1a; 对于一个数x2a∗5b∗px2^a*5^b*px2a∗5b∗p 如果p1,也就是质因子只有2和5&#xff0c;则x是不循环小数&#xff0c;即f(x)0如果p!1,则x是循环的&#xff0c;且循环开始于小数点后第1max{p2,p5p_{2},…

针对.NET Core, Xamarin以及.NET的自动类型安全Rest库: Refit

本文大部分内容是针对Refit官网的翻译。官网地址&#xff1a; https://github.com/reactiveui/refitRefit是一个类似于Retrofit的Restful Api库&#xff0c;使用它&#xff0c;你可以将你的Restful Api定义在接口中。例如&#xff1a;public interface IGitHubApi { [Get(&quo…

2019牛客多校第一场

2019牛客多校第一场 题号题目知识点AMonotonic MatrixBSymmetric MatrixCFluorescent 2DTwo GraphsERemovalFSum of MaximumGSteiner TreeHLongest PathISubstringJDifferent Integers

用ProGet搭建本地私有NuGet仓库

搭建ProGet下载官网下载Windows版本的Inedo Hub &#xff08;https://inedo.com/proget/download&#xff09;下载下来的软件名&#xff1a; ProGetInstaller.exe安装点击ProGetInstaller.exe&#xff0c;出现如下安装界面Registration 选项选择 Free ;SQL Sever 选项选择 Spec…

CQRS架构下Equinox开源项目分析

一.DDD分层架构介绍本篇分析CQRS架构下的Equinox开源项目。该项目在github上star占有2.4k。便决定分析Equinox项目来学习下CQRS架构。再讲CQRS架构时&#xff0c;先简述下DDD风格&#xff0c;在DDD分层架构中&#xff0c;一般包含表现层、应用程序层(应用服务层)、领域层(领域服…

CF1548B Integers Have Friends

CF1548B Integers Have Friends 题意&#xff1a; 给定 n 和一个长度为 n 的数组 a&#xff0c;求一个最长的区间 [l,r]\left[l,r\right][l,r]&#xff0c;使得存在 m≥2和km\geq 2 和 km≥2和k&#xff0c;对于所有 l≤i≤rl\leq i\leq rl≤i≤r,ai≡k(modm)a_{i}≡k(\mod m…