zoukankan      html  css  js  c++  java
  • hdu 6025 前缀 后缀 gcd

    大致题意:

           去掉一个元素能使这个数列的GCD最大为多少

    分析:

           我们求一个数列的GCD,是先求前两个元素的GCD,然后将这个GCD值在与下一个元素进行GCD运算。由此可知进行GCD运算的顺序对最终的结果是没有影响的。我们再看看数列的长度范围,小于100000。那我们就枚举去掉的那个元素,那么去掉元素后的数列的GCD即这个元素前面一段数列的GCD再与这个元素后面一段数列的GCD进行GCD运算。所以我们需要两个数组分别记录前缀GCD和后缀GCD,这两个数组都可以通过O(n)算法算出来。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int a[100000+5];
    int pre[100000+5],suf[100000+5];
    
    int gcd(int a, int b)
    {
        while(b)
        {
            int c = a%b;
            a = b;
            b = c;
        }
        return a;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n;
            scanf("%d",&n);
            for(int i=0; i<n; i++)
                scanf("%d",&a[i]);
            pre[0]=a[0];
            for(int i=1; i<n; i++)
            {
                pre[i]=gcd(pre[i-1],a[i]);
            }
            suf[n-1]=a[n-1];
            for(int i=n-2; i>=0; i--)
            {
                suf[i]=gcd(suf[i+1],a[i]);
            }
            int ans=max(suf[1],pre[n-2]);
            for(int i=1;i<n-1;i++)
            {
                ans=max(ans,gcd(pre[i-1],suf[i+1]));
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    关于Altium Designer的BOM,元件清单
    关于Altium Designer中的搜索图纸上的元件
    头文件的问题
    关于stm32加不进.h文件的问题
    【数论】——欧拉定理
    python matplotlib 多图像排列显示
    直方图均衡原理
    辐射度,辐照度,相机响应函数
    A = min(1, max(0, A))
    gamma校正
  • 原文地址:https://www.cnblogs.com/pach/p/6821808.html
Copyright © 2011-2022 走看看