牛客小白月赛79 C题

牛客小白月赛79

C-mex和gcd的乘积

image

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;
}
posted @ 2023-10-21 16:17  du463  阅读(30)  评论(0编辑  收藏  举报