Codeforces

Codeforces #1496B Max and Mex

ppwag 2021. 3. 29. 00:45

문제

https://codeforces.com/problemset/problem/1496/B

걸린 시간

-

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int tc;
    cin >> tc;
    while(tc--){
        ll n, k;
        cin >> n >> k;
        set<int> a, s;
        int tmp;
        for(int i = 0; i < n; i++){
            cin >> tmp;
            a.insert(tmp);
        }
        if(a.find(0) == a.end()){
            s.insert(0);
        }
        for(int x : a){
            int low = x-1;
            int high = x+1;
            if(low >= 0 && a.find(low) == a.end()){
                s.insert(low);
            }
            if(high <= INF && a.find(high) == a.end()){
                s.insert(high);
            }
        }
        int me = *s.begin();
        int ma = *a.rbegin();
        int el = round((me*1.0+ma)/2);
        if(k == 0){
            cout << n << "\n";
        }
        else if(me < ma){
            if(a.find(el) != a.end()){
                cout << n << "\n";
            }
            else{
                cout << n+1 << "\n";
            }
        }
        else{
            cout << n+k << "\n";
        }
    }
    return 0;
}

예제를 5개 이상 풀어보니 대회때는 보이지 않았던 규칙들이 눈에 들어왔다. mex(S) 가 max(S) 보다 클 땐 ⌈(a+b)/2⌉ 값이 계속해서 1씩 증가되므로 n+k 가 답이고, 작을 땐 몇번을 반복해도 ⌈(a+b)/2⌉ 값이 동일하기 때문에 S 에 값이 존재한다면 n, 존재하지 않으면 n+1 이 답이된다.

문제를 푸는동안 자잘한 실수들이 많아서 따로 정리했다.

  • 천장 함수가 있다고 무조건 올림하지 말자. "(rounded up)"을 보지 못하고 ceil 함수를 사용했다.
  • mex 값을 구하는 방법으로 set 을 이용했는데 꼼꼼하지 못해 일부 케이스에선 제일 낮은 값이 0일 때 다른 값을 출력했다.
  • k 값이 0 일때의 처리를 해주지 않았다.
  • ⌈(a+b)/2⌉ 에서 a+b 에 괄호처리를 해주지 않았다.

'Codeforces' 카테고리의 다른 글

Codeforces #1484B Restore Modulo  (0) 2021.03.30
Codeforces Round #711 (Div. 2) A, B  (0) 2021.03.30
Codeforces #1506B Partial Replacement  (0) 2021.03.27
Codeforces #1499B Binary Removals  (0) 2021.03.27
Codeforces #1485B Replace and Keep Sorted  (0) 2021.03.27

댓글