본문 바로가기

prompt

[토요라운드] C. 카약과 강풍 (2891)

조금 찜찜...

그냥 카약이 부셔지면 양 옆에서 빌려오도록 구현했다.

 

그리디.. 그리디인 것 같다. 

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#pragma warning(disable:4996)
 
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
 
int main() {
    int n, s, r;
    scanf("%d %d %d", &n, &s, &r);
    
    vector<int> v(n+2);
    
    for (int i = 0; i < s; i++)
    {
        int in;
        scanf("%d", &in);
        
        v[in]--;
    }
    
    for (int i = 0; i < r; i++)
    {
        int in;
        scanf("%d", &in);
        
        v[in]++;
    }
    
    for (int i = 1; i <= n; i++)
    {
        if (v[i] != -1)
            continue;
        
        if (v[i-1] == 1)
        {
            v[i-1] = 0;
            v[i] = 0;
        }
        else if (v[i+1] == 1)
        {
            v[i+1] = 0;
            v[i] = 0;
        }
    }
    
    int cnt = 0;
    for (int i = 1; i <= n; i++)
    {
        if (v[i] == -1)
            cnt++;
    }
    printf("%d", cnt);
    
    return 0;
}