首页 > 其他分享 >P8682 [蓝桥杯 2019 省 B] 等差数列

P8682 [蓝桥杯 2019 省 B] 等差数列

时间:2023-03-15 23:23:26浏览次数:44  
标签:P8682 10 公差 long 蓝桥 item 最大公约数 2019 等差数列

P8682 [蓝桥杯 2019 省 B] 等差数列

[蓝桥杯 2019 省 B] 等差数列

题目描述

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。

现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?

输入格式

输入的第一行包含一个整数 N。

第二行包含 N 个整数 A_1,A_2,...,A_N。(注意 A_1 ∼ A_N 并不一定是按等差数列中的顺序给出 )。

输出格式

输出一个整数表示答案。

样例 #1

样例输入 #1

5
2 6 4 10 20

样例输出 #1

10

提示

包含 2,6,4,10,20 的最短的等差数列是 2,4,6,8,10,12,14,16,18,20

对于所有评测用例,2 ≤ N ≤ 10^5,0 ≤ A_i ≤ 10^9。

蓝桥杯 2019 年省赛 B 组 H 题。

分析

一开始拿到这道题的时候,我的第一个想法是这样的:

  1. 先给数组排序,计算两数之间最大的差值d
  2. 从d开始判断是否满足为数列的公差,不满足就d--再继续判断,直到满足,如果d一直不满足到1,则结束,假设最小的公差为1.
  3. 如果公差为0,即该等差数列的每一项都相同,则答案为数组长度。

但是,我还是太天真了,太傻了,看了网上大佬的题解后,深感羞愧不如。

这道题其实考的是欧几里得的求最大公约数,涉及到一点点数论的知识。

我们只需要求出每一项与第一项的差值,然后这些差值求一个最大公约数,该最大公约数就是等差数列的公差。

对于无序的数据要先从小到大排序。

从已有项中找到使得项数最小的公差,这个公差必然满足最大的公差,那么就是从每项数据之间的差值中找到一个最大公约数,题目的整体做法就出来了。那么在编程时,主要考虑以下几个方面,就可以了

  • 最大公约数的函数构造
  • 在多个差值中的求出最大公约数
  • 注意公差为0的情况,直接输出n
  • 项数 n = (an-a1)/d+1 ,d为公差

提交答案

#include<bits/stdc++.h>
using namespace std;

//递归算法求解的gcd函数,可以运行成功,最后可以得100分
long gcd(long a,long b)
{
    if(b==0)
    {
        return a;
    }
    return gcd(b,a%b);
}

/*
循环算法的gcd函数,也可以运行成功,但是最后只得了90分
long gcd(long a,long b)
{
    while(b^=a^=b^=a%=b);
    return a;
}
*/

int main()
{
    long n;
    cin>>n;
    long item[100005]={0};
    long dif[100005]={0};  //用来存储每一项之间的差值
    for(long i=1;i<=n;i++)
    {
        cin>>item[i];
    }
    sort(item+1,item+n+1); 
    for(long i=2;i<=n;i++)
    {
        dif[i-1]=item[i]-item[i-1];
    }
    sort(dif+1,dif+n); //1~n-1排序
    //找到一个差值序列中的最大公约数,是所有差值的因子,这个值就是最大的公差
    for(long i=2;i<n;i++)
    {
        dif[1]=gcd(dif[i],dif[1]);
    }
    if(dif[1]>0) //考虑公差为0的特殊情况
    {
        long ans=(item[n]-item[1])/dif[1]+1;
        cout<<ans<<endl;
    }
    else
    {
        cout<<n<<endl;  //公差为0,即有n项
    }
    return 0;
}

标签:P8682,10,公差,long,蓝桥,item,最大公约数,2019,等差数列
From: https://www.cnblogs.com/bujidao1128/p/17220632.html

相关文章

  • 2023.3.15蓝桥杯集训·每日一题
    AcWing200.Hankson的趣味题题目描述Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson正在思考一个有趣的问题。今天......
  • 蓝桥杯嵌入式——KEY模块(长按)
    其实这是上一篇的升级版,此处只呈现和上文中的差异之处编程.h文件中的结构体新增了两个变量 1#ifndef_interrupt_H_2#define_interrupt_H_34#include"m......
  • 蓝桥杯嵌入式——KEY模块
    配置 这个是引脚配置  然后是时钟配置(分频和arr)  别忘了这个 编程(初始化) 这个真的很容易忘记1HAL_TIM_Base_Start_IT(&htim3);编程(中断).h文......
  • 蓝桥杯嵌入式——LED模块
     配置这一块的配置比较常规,没有什么特别要说的 编程 编程的话,主要是LED_DISP的编写,这个编写之后对小灯的控制会很方便主要要记得传入的参数类型为unsignedchar,......
  • Java蓝桥杯
    1、特殊回文数:123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。publicclassMa......
  • BUUCTF-REVERCE-[2019红帽杯]easyRE
    [2019红帽杯]easyRE​ 偶尔还是得花时间在难题上面啊。虽然很麻烦,但吃透之后真的是受益匪浅,比狂刷简单题有效多了。1.破解1一般而言,寻找非随机数会是比较快捷的方式。......
  • 2019 ICPC Asia-East Continent Final
    D考虑树形DP,记\(f[u],g[u]\)分别为最终回到u/停在子树中的最晚第一次到达u的时间。原本以为在枚举了最后一个的情况下,遍历子树的顺序是以f升序的,(因为只有最后一个不对后面......
  • P8680 [蓝桥杯 2019 省 B] 特别数的和
    P8680[蓝桥杯2019省B]特别数的和[蓝桥杯2019省B]特别数的和题目描述小明对数位中含有2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2......
  • WindowsServers2019摄像头不可用的解决方案
    1、系统服务开启启动管理员命令提示符,执行下列命令scconfigAudiosrvstart=autoscconfigAudioEndpointBuilderstart=autoscconfigstisvcstart=autoscconfigWPD......
  • 【编辑器】常用编程环境使用感受20190804
    一、编辑器1、Vim/Emase又被称之为神器:编辑器之神vs神之编辑器学习使用成本高and定义所有功能2、Sublime/Vscode/Atom现在编辑器,有以下特点:跨平台,颜值高,性能佳3、Note......