首页 > 其他分享 >P8792 [蓝桥杯 2022 国 A] 最大公约数

P8792 [蓝桥杯 2022 国 A] 最大公约数

时间:2024-03-28 09:46:56浏览次数:22  
标签:cnt return int P8792 蓝桥 2022 include

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <cmath>
#define For(i, j, n) for(int i = j ; i <= n ; ++i)
using namespace std;

const int N = 1e5 + 5;

int gcd(int x, int y)
{
    return y?gcd(y, x%y):x;
}

int n, a[N];
int st[N][17];
int Log[N];
int cnt;

void build_st()
{
    Log[0] = -1;
    for(int i = 1; i <= n; i++)
        Log[i] = Log[i/2] + 1;
    for(int i = 1; i <= n; i++)
        st[i][0] = a[i];
    for(int k = 1; k <= 16; k++)
        for(int i = 1; i + (1 << (k - 1)) <= n; i++)
            st[i][k] = gcd(st[i][k - 1], st[i + (1 << (k - 1))][k - 1]);
}

int query(int l, int r)
{
    if(r < l)
        return 0x3f3f3f3f;
    int t = Log[r - l + 1];
    return gcd(st[l][t], st[r - (1 << t) + 1][t]);
}

int solve()
{
    int ans = n;
    if(query(1, n) > 1)
        return -1;
    if(cnt)
        return n - cnt;
    int i = 1;
    for(int j = 1; j <= n; j++)
    {
        while(i < j && query(i + 1, j) == 1)
            i++;
        //cout << "R:" << i << " " << j << endl;
        if(query(i, j) == 1)
            ans = min(ans, j - i + 1);
    }
    return ans + n - 2;
}

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%d", &a[i]), cnt += (a[i] == 1);
    build_st();
    printf("%d\n", solve());
    return 0;
}

数组中含有1的情况要进行特判。

标签:cnt,return,int,P8792,蓝桥,2022,include
From: https://www.cnblogs.com/smartljy/p/18100793

相关文章

  • 在 Windows Server 2022 系统中,你可以使用一些组合命令结合系统自带的工具来实现文件
    在WindowsServer2022系统中,你可以使用一些组合命令结合系统自带的工具来实现文件夹同步。以下是一个示例组合命令,结合Robocopy和TaskScheduler来实现文件夹同步:使用Robocopy进行文件夹同步:Robocopy是Windows自带的一个命令行工具,用于复制大量文件和文件夹。你可......
  • 第十一届蓝桥杯单片机省赛解答
    第一部分1.C2.BD3.B4.D5.ABC6.B7.AB8.D9.ABCD10.C接收和发送数据是互不影响的第二部分#include"STC15.h"#include"sys.h"#include"smg.h"#include"onewire.h"#include"iic.h"#include"key.h"uinttemp=0;......
  • 蓝桥杯试题 基础练习 特殊回文数
    问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。输入格式输入一行,包含一个正整数n。输出格式按从小到大的顺序输出满足条件的整数,每个整数占一行。样例......
  • 2023第14届蓝桥杯大赛软件赛省赛C/C++大学A组第6题题解
    目录问题描述:方法一:dfs暴力模拟(45%)方法二:dfs剪枝(100%)问题描述:        小蓝正在一个瓜摊上买瓜。瓜摊上共有n个瓜,每个瓜的重量为Ai。小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。小蓝希望买到的瓜的重量的和恰好为m。请问小蓝至......
  • 蓝桥杯单片机AT24C02
    一个简单的示例程序,统计开机次数。代码如下:#include<STC15F2K60S2.H>#include<intrins.h>#include"onewire.h"#include"iic.h"u8flag_display=0;u8flag_ds18b20=0;u8flag_at=0;u8at=0;u8temp=0;u8a[8]={10,10,10,10,10,10,10,10};voidctr......
  • 动态规划刷题(算法竞赛、蓝桥杯)--数字三角形(线性DP)
    1、题目链接:[USACO1.5][IOI1994]数字三角形NumberTriangles-洛谷#include<bits/stdc++.h>usingnamespacestd;intr;constintN=1010;inta[N][N];intmain(){ cin>>r; for(inti=1;i<=r;i++){ for(intj=1;j<=i;j++){ cin>>a[i][j]; ......
  • 吴恩达2022机器学习专项课程(一) 4.1 梯度下降
    问题预览1.梯度下降算法的作用是?2.梯度下降如何计算线性回归的成本函数?3.所有的成本函数都是一个形状吗?4.在非凸形状中,梯度下降的更新过程是?5.在非凸形状中,不同的初值对最小化成本函数的影响是?6.什么是局部最小值?笔记1.梯度下降算法的作用梯度下降算法可以计算大多......
  • 【蓝桥杯3.23小白赛】(详解)
    第一题签到题不多说【二进制王国】#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;//intCmp(strings1,strings2)测试了一下时间差确实很明显,还是用下面的内个intCmp(conststring&s1,conststring&s2)//const修饰表示在函......
  • 【蓝桥杯选拔赛真题48】C++九进制回文数 第十四届蓝桥杯青少年创意编程大赛 算法思维
    目录C++九进制回文数一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、推荐资料C++九进制回文数第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现提示信息:回文数:反向排列与原......
  • 蓝桥杯练习题总结(三)线性dp题(摆花、数字三角形加强版)
    目录 一、摆花思路一: 确定状态:初始化:思路二:确定状态:初始化:循环遍历: 状态转移方程: 二、数字三角形加强版一、摆花题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了......