Codeforces Round 1074 (Div. 4)_C. Shifted MEX
英文题面如图

题目要求

先说我一开始的思路 我是想先按升序排序 然后把所有的数都减去第一个数,因为我想凑出一个0,因为你肯定要有0,然后才开始算mex,我这样之后,然后开始算连续长度的最大值即相差为1的最大连续长度,后面我运行测试用例的时候,发现最后一个点 是错的 后面发现还有更好的解法
那就是 我发现你求mex的最大值,就是求最长的相两两相差为1连续序列,因为我操不操作,我这个连续序列的不变的,所有我只考虑最长的连续序列就可以算出mex最大是多少了
\(ACcode\)
int n ;
cin >> n ;
vector<int>a(n) ;
set<int>st ;
for(int i = 0;i < n;i++){
cin >> a[i] ;
st.insert(a[i]) ;
}
vector<int> b(st.begin(), st.end());
int cnt1 = 1 ,cnt2 = 1;
for(int i = 1;i < st.size();i++){
if(b[i] - b[i-1] == 1)cnt2++ ;
else {
cnt1 = max(cnt1,cnt2) ;
cnt2 = 1 ;
}
}
cnt1 = max(cnt1,cnt2) ;
cout << cnt1 << "\n" ;
}

浙公网安备 33010602011771号