计蒜客-蒜头君的数轴(gcd)

程序设计:蒜头君的数轴 传送门 今天蒜头君拿到了一个数轴,上边有n个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数n(1 \leq n \leq 10^5)n(1≤n≤105),表示数轴上的点数。 第二行为nn个不重复的整数x_1,x_2,...,x_n(-10^9 \leq x_i \leq 10^9)x1​,x2​,...,xn​(−109... 阅读详情

蒜头君的数轴

今天蒜头君拿到了一个数轴,上边有 nnn 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。

蒜头君想知道,他最少需要加多少个点使这个数轴变优美。

输入格式

输入第一行为一个整数 n(1≤n≤105)n(1 \leq n \leq 10^5)n(1≤n≤105),表示数轴上的点数。

第二行为 nnn 个不重复的整数 x1,x2,...,xn(−109≤xi≤109)x_1,x_2,...,x_n(-10^9 \leq x_i \leq 10^9)x1​,x2​,...,xn​(−109≤xi​≤109),表示这些点的坐标,点坐标乱序排列。

输出格式

输出一行,为一个整数,表示蒜头君最少需要加多少个点使这个数轴变优美。

样例输入
4
1 3 7 15
样例输出
1
  1. 主要思路是求:最大公约数。  
  2. n个数,互不相同,则求相邻两点距离,共有n-1个距离。  
  3. 题目允许最多有一对点距离与其他不同,因此对于n-1个距离,我们  
  4. 都要考虑到,因此要对n-1个距离追个删去,对剩余n-2个距离求共同  
  5. 的最大公约数。为了求得这个最大公约数。  
  6.   
  7. 则解法如下:  
  8. 1.如果n<=3,则不需要考虑题中操作就满足题目要求,答案为0.  
  9. 2.除情况1外的其他情况。  
  10.   
  11. 设置gcd1[i]:表示前i个距离求得的公共最大公约数。  
  12. 设置gcd2[i],表示后i个距离求得的公共最大公约数。  
  13. 则考虑逐个删除某个距离,假设当前删除第i个距离。  
  14. 若i = 1,即删除第一个距离,则需要后n-2个距离的最大公约数,即gcd2[n-2].  
  15. 若i = n-1,即删除最后一个距离,则需要前n-2个距离的最大公约数,即gcd1[n-2].  
  16. 若i > 1 && i < n-1,则需要前i-1个距离的最大公约数和后n-1-i个距离的最大公约数  
  17. 和在一起求出最大公约数。即gcd(gcd1[i-1],gcd2[n-i-1]). 

那么得到了我们要操作的n-2段距离的最大公因数,那么我们的目标就是通过进行截取(也就是题目说的加点)将这些距离都变成这个最大公因数的长度,那么我们把这n-2个总距离算出来,除以这个最大公因数就得到了要把这一个整体的长度分成都是长度为最大公因数的长度需要多少点,为啥?

因为加入我们每一段长度d1,d2,d3..di,最大公因数g,那么他们的和一定可以被g整除,整除后的结果tmp就是可以分成多少段g的长度,那么加上两边的点,我们需要tmp+1个点进行分割·-·-·-·-·-·-·,注意两边也需要点,那么原来我删去了一段距离,删去这段距离后,两边距离要连起来中间要加一个点,所以删去一个距离相当于删去一个点,所以原来有n-1个点,我们总共需要tmp+1个点,那么我们新需要加的点就是tmp+1-(n-1) = tmp-n+2个

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
int gcd1[maxn];//gcd1[i]是前i个距离的gcd
int gcd2[maxn];//gcd2[i]是后i个距离的gcd
int arr[maxn];
ll dist[maxn];
int gcd(int a,int b){
    if(b == 0) return a;
    else return gcd(b,a%b);
}
int main(){
    int n;
    ll sum;
    scanf("%d",&n);
    for(int i = 0; i < n; i++){
        scanf("%d",&arr[i]);
    }
    if(n <= 3){
        printf("0\n");
        return 0;
    }
    sort(arr,arr+n);
    sum = 0;
    for(int i = 1; i < n; i++){
        dist[i] = arr[i] - arr[i-1];
        sum += dist[i];
    }//储存距离并算出总的距离长度
    int d = dist[0];
    for(int i = 1; i <= n-1; i++){
        d = gcd(d,dist[i]);
        gcd1[i] = d;//记录正向前i个距离的gcd
    }
    d = dist[n];
    for(int i = n-1; i >= 1; i--){
        d = gcd(d,dist[i]);
        gcd2[n-i] = d;
    }
    int Min = 0x3f3f3f3f;
    int temp;
    //枚举删除每一个区间,即这个区间可以不管,其他区间全部变成相同的长度
    for(int i = 1; i < n; i++){
        if(i == 1){
            temp = (sum - dist[i]) / gcd2[n-2];
        }
        else if(i == n-1){
            temp = (sum - dist[i]) / gcd1[n-2];
        }
        else{
            temp = (sum - dist[i]) / gcd(gcd1[i-1],gcd2[n-i-1]);
        }
        Min = min(Min,temp-n+2);
    }
    printf("%d\n",Min);
}

计蒜客 蒜头君的数轴 (GCD ,思路) 题意:今天蒜头君拿到了一个数轴,上边有 n 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。蒜头君想知道,他最少需要加多少个点使这个数轴变优美。输入第一行为一个整数 n,表示数轴上的点数。第二行为 n 个不重复的整数 ,表示这些点的坐标,点坐标乱序排列。输出格式输出一行,为一个整数,表示蒜头君最少需要加多少个点使这... 阅读详情

相关推荐

表格数据学习的图神经网络综述

今天学习一篇发表在中科院一区期刊《ACM Computing Surveys》的综述文章《Graph Neural Networks for Tabular Data Learning: A Survey with Taxonomy & Directions》,该刊主要刊载计算机理论方法领域的系统性综述与教程论文,注重跨学科技术融合研究,最新的影响因子为28.0。本文的目的在于通过学习这篇文章,了解关于表格数据学习点图神经网络一些基础知识。

qq_41009600的博客 798

蒜头君的数轴(gcd)Monitor(降维)

文章来源:我的博客 程序设计:蒜头君的数轴 题目来源 :点击我 今天蒜头君拿到了一个数轴,上边有 n 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数 n(1 <=n ,q<= 10^5)(1≤n≤105),表示数轴上的点数。 第二行为 n个不重复的整数 x1,x2,…, xn (−109≤xi≤109),表示这些点的坐标,点

AGNING的博客 384

如何获取SAP BTP账户及BAS启用

返回到 Service Marketplace 点击SAP Business Application Studio 然后go to Application。进入子用户的OverView里面找到Entitlements添加SAP Business Application Studio。注意:在选购BTP免费环境的时候,使用人要选公司才可以成功。在完成上述操作后,就可以登陆Cockpit。这里有SAP官方的BTP试用的手顺链接。配置权限※我绑定的是登录时的邮箱。※过程中有问题可以在评论区讨论。

wangshulong2013的博客 721

计蒜客-蒜头君的数轴(前缀和)

题目描述 今天蒜头君拿到了一个数轴,上边有 nn 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数 n(1≤n≤105)n(1≤n≤105),表示数轴上的点数。 第二行为 nn 个不重复的整数 x1,x2,.....

amf12345的博客 521

硅传CC1310二次开发必备:手把手教你用JTAG解锁被锁定的Flash存储器

本文针对硅传CC1310模块二次开发中常见的Flash锁定问题,提供了从原理剖析到实战操作的完整解决方案。详细介绍了如何使用Uniflash和Flash Programmer 2等工具进行Flash解锁和擦除,并强调了硬件连接稳定性与供电质量的关键作用,帮助开发者彻底解决烧录障碍,为后续应用开发铺平道路。

weixin_29189373的博客 252

张正友标定法_单目-线激光三维扫描系统中光刀平面的标定

单目-线激光三维扫描系统中光刀平面的标定线结构光有结构简单、精度高、测速快等特点,被广泛应用于三维重建领域。线结构光三维扫描系统由一个相机和一个线结构光投射器构成,线结构光投射器将线结构光投射到被测物体表面,相机采集带有线激光的被测物体图像,根据相机和线激光投射器间的相对位置关系,使用激光三角法计算出激光线上的点在相机坐标系下的坐标。激光三角法原理如下图所示,线激光投射的扇形区域可以看作是一个平面...

weixin_39616379的博客 1074

【计蒜客 A1633 --- 程序设计:蒜头君的数轴】gcd

【计蒜客 A1633 --- 程序设计:蒜头君的数轴】gcd 题目来源:点击进入【计蒜客 A1633 — 程序设计:蒜头君的数轴】 Description 今天蒜头君拿到了一个数轴,上边有 n 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 Input 输入第一行为一个整数 n(1≤n≤105),表示数轴上的点数。 第二行为 n 个不重复的整数 x1,x2,…,xn (

来日浅谈的博客 1439

批量导入经纬度点到奥维地图中

随便说说 最近出来出差,天天东奔西跑的,跑完了回到酒店还得整理一天的成果,基本上晚上9点才能整理完,累的基本上倒头就睡,没时间鼓捣自己喜欢的东西了。但想着也得写点啥吧,想来想去就那最近工作中用到的东西吧。因为我们现在的工作内容呢,基本上就是按照着上面给的地理位置找到地方开始检查。所以呢,就需要批量的把手上的经纬点信息导入到地图中,安排好路线,利用导航高效的找到地方。给的坐标就是gps点,wgs-84的,使用奥维地图最方便了,不用做坐标转换直接能用。所以作为组里的gis担(苦)当(力),这个导坐标的活就由我来

lionhenryzxxy的博客 3万+

计蒜客A1633 蒜头君的数轴

传送门:计蒜客A1633 蒜头君的数轴 题目描述 题目样例: 样例输入: 4 1 3 7 15 样例输出: 1 思路:   题中说明点坐标乱序排列,那么首先将其排序,计算相邻两点的间距。要使得数轴优美且插入的点最少,我们的目标间距应该是所有间距的gcd。但是题中说了最多可以有一对点的距离与其他不同,我们需要找出忽略那个间距,使得目标间距最大。 AC代码: #include<cstdio> #include<iostream> #include<algorithm> #

Lucas9的博客 315

FastApi教程

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

小石潭记丶 1560

J1939协议实用指南与J1939数据记录方案

“没错,这是一份SAE J1939简单、实用指南。”—虹科 **开篇:**在这篇介绍中,我们介绍了J1939协议的基本知识,其中包括PGN和SPN。因为这是一篇偏向应用的简介,所以您还将会学习到如何通过DBC文件解码J1939数据、如何记录J1939、典型的应用案例和实用技巧。下面,来了解下这份简单易懂的J1939介绍吧~ 什么是J1939? 简而言之,SAE J1939其实是一套标准,重型车辆ECU间就是按照这套标准在CAN总线上进行通信的。当今大多数车辆都通过CAN(Controller Area Ne

1万+

计蒜客 A1633 --- 蒜头君的数轴(gcd)

思路: 数论知识,我们要求完美的数轴(间距为只有一个不同),怎样确定哪个作为不同的间距是本题的突破口 1.首先忽略这个不同间距,我们怎样找需要插入多少个点呢,只需找到剩下间距的最大公约数,这个最大公约数就是相同的间距,那么我们用这些间距的总距离除以这个最大公约数再减去已有的点(n-2),就是需要插入的点。 2.设这个不同的间距为i,我们对这个分界点前面的间距求gcd,后面的间距 求gcd,最后两个的再求个gcd。例如(间距为 4 8 3 8 16) 3.枚举每个分界点,找出来最小插入点数即可。 代码 .

qq_45249273的博客 250

Coze 上 OpenClaw 完整使用攻略(零代码 + 24 小时在线 + 飞书 / 微信接入)

Coze(扣子)是目前国内零门槛部署 OpenClaw 最友好的平台,无需服务器、不用命令行,5 分钟即可拥有可执行本地 / 云端任务的 AI 助手,还能一键发布到飞书、微信、钉钉等 IM。

hy行者勇哥的博客 2920

计蒜客 蒜头君的数轴 (gcd前缀和)

传送门思路:    首先考虑到要满足除了一对点的距离,其余的相邻两点间的距离要相等,那么最后这个距离r一定要是原本相邻点距离的公约数,且一定是最大公约数才最优.   n个点n-1个距离,每次去掉一个, 那么如何求每次去掉一个剩下n-2个距离的gcd呢?由于gcd的非递增性质,也就是 a,b,c三个数的gcd = __gcd(__gcd(a,b),c).我们可以正向维护一个lgcd前缀,逆向维护一个...

Marcus-Bao的个人主页 638

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

计蒜客 25092 蒜头君的数轴

题目描述 今天蒜头君拿到了一个数轴,上边有 nnn 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 &nbsp; 输入格式 输入第一行为一个整数 n(1≤n≤105)n(1≤n≤105)n(1 \leq n \leq 10^...

小坏蛋_千千 739

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

蒜头君的数轴:正反gcd

题目:蒜头君的数轴 今天蒜头君拿到了一个数轴,上边有 nnn 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数 n(1≤n≤105)n(1 \leq n \leq 10^5)n(1≤n≤105),表示数轴上的点数。 第二行为 nnn 个不重复的整数 x1,x2,…,xn(−109≤xi≤109)x_1,x_2,…,x_n(-10^9 \le

鼎寒的博客 308

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

gcd前缀和-蒜头君的数轴

题目: 今天蒜头君拿到了一个数轴,上边有n个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数n(1≤n≤10^5),表示数轴上的点数。 第二行为nn个不重复的整数x1​,x2​,...,xn​(−10^9≤xi​≤...

weixin_30682127的博客 117

蒜头君的数轴

今天蒜头君拿到了一个数轴,上边有 n个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数 (1≤n≤100000),表示数轴上的点数。 第二行为 nnn 个不重复的整数 x1,x2,...,xn(−1000000000≤xi≤...

weixin_43154720的博客 642

程序设计:蒜头君的数轴(gcd前缀和)

程序设计:蒜头君的数轴 题目链接 今天蒜头君拿到了一个数轴,上边有 nn 个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数 n(1≤n≤105 ),表示数轴上的点数。 第二行为 n 个不重复的整数 x1,x2,…,xn(-109<= xi<=109) 表示这些点的坐标,点坐标乱序排列。 输出格式 输出一行,为一个整数,表示蒜头君

weixin_47701814的博客 299

程序设计:蒜头君的数轴 (前缀和➕gcd)

今天蒜头君拿到了一个数轴,上边有nn个点,但是蒜头君嫌这根数轴不够优美,想要通过加一些点让它变优美,所谓优美是指考虑相邻两个点的距离,最多只有一对点的距离与其它的不同。 蒜头君想知道,他最少需要加多少个点使这个数轴变优美。 输入格式 输入第一行为一个整数n(1 \leq n \leq 10^5)n(1≤n≤105),表示数轴上的点数。 第二行为nn个不重复的整数x_1,...

weixin_30544657的博客 312

程序设计:蒜头君的数轴 计蒜客 - A1633

原题链接 博客园没了以至于不得不用回优快云 思路: 之前讲得很详细了GO 想补充的是,如果选定区间能整除maxn,那么说明有多个区间gcd左右都是maxn.存储下这些区间,前缀和预处理每个区间要加的点数.取最小值即可, #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <algorithm> using namespace std

sky666tzz的博客 161

2018蓝桥模拟赛 蒜头君的数轴

脑子锈咯,看了题解才理出来。 这里提到的希望n-1个点的距离都一致,为了让加的点尽可能的小,这个距离其实就是这n-2个距离值的公共gcd的最大值。(公共的gcd,对应多个值的最大共同部分,) 这里处理完之后就是利用gcd的前后缀处理一下挖去一个点的之后的区间gcd #include <iostream> #include <stdio.h> ...

diaoqi6581的博客 158

差分与前缀和习题

目录 1.最高的牛 2.蒜头君的数轴 3.Covered Points Count 1.最高的牛 2.蒜头君的数轴 3.Covered Points Count 题目连接:https://www.acwing.com/problem/content/description/103/ 题意:现在有n头牛,我们只知道其中的最高牛的高度和位置,现在给了m个关系,每个关系输入a,b.表示牛a和牛b可以互相看见 俩头牛能互相看见的条件是俩头牛之间的牛头比他们矮,求每头牛最大的身高 注意..

qq_44797733的博客 699
上一篇: 计蒜客-蒜头君下棋(找规律)
下一篇: 计蒜客-划分整数(dp)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值