牛客小白月赛79
C-mex和gcd的乘积
C思路:
靠,当时想到了怎么就是没有想出来呢,对于这个序列来说0就是一个突破点,我们只需要看看0出现的位置就可以了。
区间mex = 0时,ans = 0
区间mex = 1时,看gcd的大小,此时仅看0左右元素即可
区间mex > 1时,gcd = 1,看mex即可,仔细想想看整个数组的mex即可
注意特判全0的数组!
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int a[N],vis[N];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
//这里是输入
// int flag=0;
bool flag=false;
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]!=0){
flag=true;
}
}//如果整个序列都没有0的话,那就直接输出0
if(!flag){
cout<<0<<endl;
return ;
}
for(int i=1;i<=n;i++){
if(i>1&&a[i-1]==0){
ans=max(ans,a[i]);
}
if(i<n&&a[i+1]==0){
ans=max(ans,a[i]);
}
}
for(int i=1;i<=n;i++){
vis[a[i]]=1;
}
int i;
for(i=0;vis[i]==1;i++){
// ans=max(ans,i);
}
ans=max(ans,i);
cout<<ans<<endl;
return ;
}
int main(){
int t=1;
while(t--){
solve();
}
return 0;
}
标签:gcd,int,小白月赛,牛客,ans,mex,79
From: https://www.cnblogs.com/du463/p/17779150.html