Avatar
“”

一个兴趣使然的追梦人

▼

Codeforces Round 1074 (Div. 4)_C. Shifted MEX

C. Shifted MEX传送门

英文题面如图

image

题目要求

image

先说我一开始的思路 我是想先按升序排序 然后把所有的数都减去第一个数,因为我想凑出一个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" ;
}
posted @ 2026-09-20 23:24  hermanO  阅读(9)  评论(0)    收藏  举报