mex和gcd的乘积
https://ac.nowcoder.com/acm/contest/66877/C
思路:
gcd里面的元素越多,gcd的值就会越小
如果数组a里面不包含0,那么mex=0,则ans=0
如果数组a里面包含0但不包含1,那么mex=1,gcd最大值就是数组a里面0旁边元素的最大值
如果mex>=2那么gcd里面一定会有gcd(0,1)=1,那么gcd就一定为1。此时的最大值就是整个数组的最大的mex。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 2e7+5
void solve(){
int n;
cin>>n;
ll a[100001];
ll sum=0;
set<ll>st;
int maxx=-1;
ll ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];//判断数组a里面是否全部为0,如果全部为0的话,那就输出0
st.insert(a[i]);//将a中的元素加到set中进行去重排序
}
if(sum==0){//所有的元素都等于0的情况
cout<<0;
return ;
}
for(int i=1;i<=n;i++){
if(a[i]==0){
//如果当前元素为0,那么就找这个元素前面一个元素和后面一个元素的最大值与ans进行比较
ans=max(ans,max(a[i-1],a[i+1]));
}
}
ll sun=0;
for(int i=0;i<=*st.end();i++){
//对于整个数组来说,第一个不存在的元素就是此时的mex值
if(st.count(i)==0){
sun=i;
break;
}
}
ans=max(ans,sun);//让它与之前判断得到的ans进行比较
cout<<ans;
}
int main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}