Code Chef JUNE Challenge 2019题解

\(SUMAGCD\)

先去重,易知答案一定是一个数单独一组剩下的一组,前缀后缀\(gcd\)一下就行了

//quming
#include<bits/stdc++.h>
#define R register
#define inline __inline__ __attribute__((always_inline))
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
const int N=1e5+5;
int a[N],suf[N],Pre[N],n,T,mx;
int main(){
    for(scanf("%d",&T);T;--T){
        scanf("%d",&n),mx=0;
        fp(i,1,n)scanf("%d",&a[i]);
        sort(a+1,a+1+n),n=unique(a+1,a+1+n)-a-1;
        if(n==1){printf("%d\n",a[1]<<1);continue;}
        Pre[0]=0;fp(i,1,n)Pre[i]=__gcd(a[i],Pre[i-1]);
        suf[n+1]=0;fd(i,n,1)suf[i]=__gcd(suf[i+1],a[i]);
        fp(i,1,n)cmax(mx,a[i]+__gcd(Pre[i-1],suf[i+1]));
        printf("%d\n",mx);
    }
    return 0;
}
上一篇:Codechef July Challenge 2019 MXMN


下一篇:获取 SickOS 1.2 Flag (CTF Challenge)