CF2013E Prefix GCD

news2024/10/6 1:30:07
【题目大意】

给定一个长度为 n n n 的数列 a 1 … n a_{1 \dots n} a1n,你可以将 a 1 … n a_{1 \dots n} a1n 按照任意顺序进行重排,使得:

∑ i = 1 n gcd ⁡ { a 1 , a 2 , a 3 , … , a n } \sum\limits_{i=1}^{n}\gcd\left \{ a_{1},a_{2},a_{3},\dots,a_{n}\right \} i=1ngcd{a1,a2,a3,,an}

最小。其中 gcd ⁡ { a 1 , a 2 , … , a n } \gcd\left \{ a_{1},a_{2},\dots,a_{n}\right \} gcd{a1,a2,,an} 表示 a 1 , a 2 , … , a n a_{1},a_{2},\dots,a_{n} a1,a2,,an 的最大公因数。

【输入格式】

第一行一个整数 t t t,表示共有 t t t 组数据。

每组数据第一行一个整数 n ( 1 ≤ n ≤ 1 × 1 0 5 ) n(1 \leq n \leq 1 \times 10^{5}) n(1n1×105),表示数列的长度。

第二行 n n n 个整数,表示 a 1 … n a_{1 \dots n} a1n。保证 1 ≤ a i ≤ 1 × 1 0 5 1 \leq a_{i} \leq 1 \times 10^{5} 1ai1×105

保证所有测试数据的 n n n max ⁡ 1 ≤ i ≤ n { a i } \max\limits_{1 \leq i \leq n}\left \{ a_{i}\right \} 1inmax{ai} 的总和不会超过 1 × 1 0 5 1 \times 10^{5} 1×105

【输出格式】

t t t 行,每行一个整数,表示答案。

【样例解释】
  • 对于第一组测试数据,你可以以 [ 2 , 4 , 2 ] [2,4,2] [2,4,2] 的顺序重排数列,这样答案为 2 + 2 + 2 = 6 2+2+2=6 2+2+2=6 最小。
  • 对于第三组测试数据,你可以以 [ 6 , 10 , 15 ] [6,10,15] [6,10,15] 的顺序重排数列,这样答案为 6 + 2 + 1 = 9 6+2+1=9 6+2+1=9 最小。

Translated by HPXXZYY, not by ChatGPT.

和洛谷上的翻译大体相同,因为是同一个人翻译的。

[Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis]

这题可以贪心。

正解就是把最小的 a i a_{i} ai 放到最前面,然后每次选取和它的 gcd 最小的那一个数。

可是,为什么这样是对的?

先证明把最小的 a i a_{i} ai 放在最前面最优。

先证明引理:若 a < b a<b a<b,有 a + gcd ⁡ ( a , b ) ≤ b a+\gcd(a,b) \leq b a+gcd(a,b)b

我们知道 gcd ⁡ ( a , b ) = gcd ⁡ ( a , b − a ) = gcd ⁡ ( b , b − a ) ≤ ( b − a ) \gcd(a,b)=\gcd(a,b-a)=\gcd(b,b-a)\leq (b-a) gcd(a,b)=gcd(a,ba)=gcd(b,ba)(ba),所以 a + gcd ⁡ ( a , b ) = a + gcd ⁡ ( a , b − a ) ≤ a + ( b − a ) = b a+\gcd(a,b)=a+\gcd(a,b-a) \leq a+(b-a) = b a+gcd(a,b)=a+gcd(a,ba)a+(ba)=b

所以,如果将较大的 a k a_{k} ak 放在前面的话,我们来看一张图(假设 A A A 是最小的元素):

在这里插入图片描述

我们可以发现,上面蓝色部分对应的 1 , 2 , 3 1,2,3 1,2,3(代表算到这个数时的前缀 gcd),会分别大于等于下面红色的 1 , 2 , 3 1,2,3 1,2,3。且上面蓝色算到 A A A 的前缀 gcd 至少为 1 1 1。所以上面的蓝色的前缀 gcd 和为 b + 1 + 2 + 3 + 4 ≥ b + 1 + 2 + 3 + 1 b+\color{blue}{1+2+3+4} \geq b+\color{blue}{1+2+3}\color{black}{+1} b+1+2+3+4b+1+2+3+1。但是下面的前缀 gcd 的和为 a + gcd ⁡ ( a , b ) + 1 + 2 + 3 ≤ b + 1 + 2 + 3 a+\gcd(a,b)+\color{red}{1+2+3} \color{black}{\leq b+}\color{blue}{1+2+3} a+gcd(a,b)+1+2+3b+1+2+3。所以显然下面的情况更优。

后面的贪心过程同理可以证明。

由于每次取 gcd 都会比上一次至少减少一半,所以时间复杂度为 O ( n log ⁡ max ⁡ { a i } ) O(n \log \max\{a_{i}\}) O(nlogmax{ai})

Code \color{blue}{\text{Code}} Code

const int N=1e5+100;
typedef long long ll;

const int inf=0x3f3f3f3f;

int n,a[N],lst,now,T;
ll ans;

int HPXXZYY(){
	n=read();
	for(int i=1;i<=n;i++)
		a[i]=read();
	
	sort(a+1,a+n+1);
	
	if (n==1) return printf("%d\n",a[1]);
	
	now=a[1];
	for(int i=2;i<=n;i++)
		now=gcd(now,a[i]);
	
	ans=1ll*now*n+(a[1]-now);
	
	lst=a[1];
	int tmp=now;
	while (true){
		now=inf;
		for(int i=1;i<=n;i++)
			now=min(now,gcd(lst,a[i]));
		
		lst=now;
		ans+=lst-tmp;
		
		if (lst==tmp) break;
	}
	
	return printf("%lld\n",ans);
}

int main(){
	T=read();
	while (T--) HPXXZYY();
	
	return 0;
}

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

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

相关文章

10.5学习

1.GateWay GateWay⽬标是取代Netflflix Zuul&#xff0c;它基于Spring5.0SpringBoot2.0WebFlux等技术开发&#xff0c;提供统⼀的路由⽅式&#xff08;反向代理&#xff09;并且基于 Filter(定义过滤器对请求过滤&#xff0c;完成⼀些功能) 链的⽅式提供了⽹关基本的功能&…

探索 Python 虚拟环境的奥秘:virtualenv 的魔法世界

文章目录 探索 Python 虚拟环境的奥秘&#xff1a;virtualenv 的魔法世界背景&#xff1a;为何选择 virtualenv&#xff1f;虚拟环境的守护者&#xff1a;virtualenv 是什么&#xff1f;安装 virtualenv&#xff1a;简单几步&#xff0c;开启隔离之旅掌握 virtualenv 的基本用法…

Relu激活

ReLU&#xff08;Rectified Linear Unit&#xff09;激活函数 是卷积神经网络&#xff08;CNN&#xff09;以及许多深度学习模型中最常用的激活函数之一。它的主要作用是引入非线性&#xff0c;使模型能够学习和表达更复杂的特征。以下是对ReLU激活函数的详细解释。 1. ReLU的…

C语言进阶版第16课—自定义类型:结构体

文章目录 1. 结构体类型的声明和初始化2. 结构体自引用3. 结构体内存对齐3.1 结构体内存对齐规则3.2 修改默认对齐数 4. 结构体传参4. 结构体实现位段5. 位段使用的注意事项 1. 结构体类型的声明和初始化 结构体在使用之前都要对其类型进行声明&#xff0c;关键字是struct&…

15分钟学 Python 第36天 :Python 爬虫入门(二)

Python 爬虫入门&#xff1a;环境准备 在进行Python爬虫的学习和实践之前&#xff0c;首先需要准备好合适的开发环境。本节将详细介绍Python环境的安装、必要库的配置、以及常用工具的使用&#xff0c;为后续的爬虫编写奠定坚实的基础。 1. 环境准备概述 1.1 为什么环境准备…

mp4转gif在线转换怎么转?7个视频转动图方法不容错过!(超简单)

mp4转gif在线转换怎么转&#xff1f;如今&#xff0c;将mp4视频转换为gif动图格式&#xff0c;满足了人们对易于分享和网络传播内容的需求。与mp4视频相比&#xff0c;gif动图文件体积相对较小&#xff0c;几乎所有网络平台都支持这种格式&#xff0c;无需额外安装插件或软件。…

CSID-GAN:基于生成对抗网络的定制风格室内平面设计框架论文阅读

CSID-GAN: A Customized Style Interior Floor Plan Design Framework Based on Generative Adversarial Network 摘要前言II. CSID-GAN METHODA. Overall FrameworkB. Algorithm and Loss Function III. DATASETS AND EVALUATION METRICSA. DatasetsB. Evaluation Metrics IV.…

信息安全工程师(34)访问控制模型

前言 访问控制模型是实现访问控制的基础&#xff0c;不同的访问控制模型提供了不同的访问控制策略和机制&#xff0c;以适应不同的安全需求。 一、自主访问控制模型&#xff08;DAC&#xff09; 定义&#xff1a;指资源的所有者有权决定谁可以访问其资源以及访问的方式。资源的…

如何实现事件流操作

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了通道相关的内容,本章回中将介绍StreamProvider组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在Flutter中Stream是经常使用的组件,对该组件的监听可void main() {///让状态栏和程序的appBar融为一体…

macos安装mongodb

文章目录 说明安装和配置安装mongodb配置PATH变量 验证日志及数据存放目录 mac启动和关闭mongodb后台启动失败问题mongodb-compass(GUI) 说明 Homebrew core 列表目前已经将 MongoDB 移除,不再为其提供支持。但是使用国内镜像的brew还是可以安装的&#xff01;这里直接从官网下…

使用 Python 代码连接 PostgreSQL

Python 是一个功能非常强大的编程语言&#xff0c;尤其在与数据库交互时&#xff0c;提供了丰富的解决方案。在实际项目中&#xff0c;我们经常需要通过 Python 连接并操作数据库。为了简化这种操作&#xff0c;ORM&#xff08;对象关系映射&#xff09;框架提供了便利。ORM 能…

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容&#xff1a; 使用AWS CLI配置密钥对创建ec2 server使用drawio&#xff08;vscode插件&#xff09;进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台&#xff0c;可以提供ec2&#xff0c;vpc&#xff0c;SNS以及clo…

灵足时代:具身智能核心部件的新秀崛起——解析数千万元天使轮融资

在智能科技日新月异的今天,具身智能作为连接物理世界与数字世界的重要桥梁,正逐步成为科技创新的前沿阵地。近日,具身智能核心部件领域的新锐公司——“灵足时代”宣布完成数千万元天使轮融资,这一消息无疑为行业内外带来了强烈的震撼与期待。本轮融资由雅瑞智友科学家基金…

多用户网页聊天室(测试报告)

一、项目背景 随着现代互联网的快速发展&#xff0c;实时通信系统&#xff08;如聊天应用&#xff09;已成为人们日常交流的重要工具。多用户网页聊天室项目旨在为用户提供一个基于Web的实时聊天平台&#xff0c;支持用户之间的即时通信、好友管理和历史消息记录查看。为了提升…

ModuleNotFoundError: No module named ‘package‘

报错&#xff1a; Traceback (most recent call last): File “”, line 198, in run_module_as_main File “”, line 88, in run_code File "D:\python\helloworld.venv\Scripts\pip.exe_main.py", line 4, in File "D:\python\helloworld.venv\Lib\site-pac…

3分钟学会下载 blender

1. blender简介 Blender是一款开源的3D创作套件&#xff0c;它由Blender Foundation维护&#xff0c;并得到了全球志愿者和专业开发者的支持。Blender广泛应用于3D模型的制作、动画、渲染、视频编辑、游戏创建、模拟、 composting以及3D打印等多个领域。 功能特点&#xff1a…

Gitlab flow工作流

Gitlab flow Gitlab flow 是 Git flow 与 Github flow 的综合。它吸取了两者的优点&#xff0c;既有适应不同开发环境的弹性&#xff0c;又有单一主分支的简单和便利。它是 Gitlab.com 推荐的做法。 1 上游优先 Gitlab flow 的最大原则叫做"上游优先"&#xff08;…

【网络篇】计算机网络——应用层详述(笔记)

目录 一、应用层协议原理 1. 进入应用层 2. 网络应用程序体系结构 &#xff08;1&#xff09;客户-服务器体系结构&#xff08;client-server architecture&#xff09; &#xff08;2&#xff09; P2P 体系结构&#xff08;P2P architecture&#xff09; 3. 进程间通讯 …

2024/10/5 数据结构打卡

对两个长度为n的升序序列A和B的元素按由小到大的顺序依次访问&#xff0c;这里访问的 含义只是比较序列中两个元素的大小&#xff0c;并不实现两个序列的合并&#xff0c;因此空间复杂度为 O(1)。按照 上述规则访问到第n个元素时&#xff0c;这个元素即为两个序列A和B的中位数。…

预扣预缴、年度汇算清缴与年终奖的个税计算

目录 1. 税率表2. 年度汇算清缴3. 预扣预缴3.1 预扣预缴的代码实现3.2 全年应纳税额与全年收入的关系 4. 年终奖 1. 税率表 月度税率表&#xff1a; 级数月度应纳税所得额税率&#xff08;%&#xff09;速算扣除数1 ( 0 , 3000 ] (0, 3000] (0,3000] 3 3 3 0 0 02 ( 3000 , 1…