码迷,mamicode.com
首页 > 其他好文 > 详细

Coprime Sequence (HDU 6025)前缀和与后缀和的应用

时间:2017-10-18 22:09:33      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:最大   log   turn   span   enc   style   return   后缀   div   

题意:给出一串数列,这串数列的gcd为1,要求取出一个数使取出后的数列gcd最大。

题解:可以通过对数列进行预处理,求出从下标为1开始的数对于前面的数的gcd(数组从下标0开始),称为前缀gcd,再以类似的方式求出后缀gcd,然后从第一个数开始枚举取出后的gcd(这个数的前缀gcd与后缀gcd的gcd)。找出最大的gcd数即可。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int a[100010],pre[100010],suf[100010];

int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}

int main(){
    int t,n;
    while(~scanf("%d",&t)){
        while(t--){
            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\n",ans);
        }

    }
    return 0;
}

 

Coprime Sequence (HDU 6025)前缀和与后缀和的应用

标签:最大   log   turn   span   enc   style   return   后缀   div   

原文地址:http://www.cnblogs.com/sapphirebitter/p/7689260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!