ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1547-C, *1100
    코드포스 2021. 8. 10. 16:14
     

    Problem - 1547C - Codeforces

     

    codeforces.com

    문제

    • Monocarp 와 Polycarp가 돌아가며 일을한다
    • 두 명의 업무기록이 각각 주어질때 실현 가능한 업무기록이면 순서를, 불가능하면 -1 을 출력하라

     

    $O(n+m)$

    줄을 추가하는 일을 최우선으로 시뮬레이션해본다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <bits/stdc++.h>
    #define endl "\n"
    #define loop(i, n) for(int i = 1; i <= n; i++)
    using namespace std;
     
    int k, n, m;
     
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0), cout.tie(0);
     
        int t;
        cin >> t;
        while(t--){
            cin >> k >> n >> m;
            vector<int> a(n+1);
            loop(i, n) cin >> a[i];
     
            vector<int> b(m+1);
            loop(i, m) cin >> b[i];
     
            int pa = 1, pb = 1;
            bool flag = true;
            vector<int> res;
            loop(i, n+m){
                if(pa <= n && a[pa] == 0){
                    res.push_back(a[pa]);
                    pa++;
                    k++;
                }
                else if(pb <= m && b[pb] == 0){
                    res.push_back(b[pb]);
                    pb++;
                    k++;
                }
                else if(pa <= n && k >= a[pa]){
                    res.push_back(a[pa]);
                    pa++;
                }
                else if(pb <= m && k >= b[pb]){
                    res.push_back(b[pb]);
                    pb++;
                }
                else flag = false;
            }
     
            if(flag){
                for(auto e: res) cout << e << ' ';
                cout << endl;
            }
            else cout << -1 << endl;
     
        }
     
        return 0;

    ※ 각 조건문에서 할당되지 않은 index에 접근하지 않도록 주의!! (ex $ap \leq n$)

    '코드포스' 카테고리의 다른 글

    1554-D, *1800  (0) 2021.08.13
    1513-B, *1400  (0) 2021.08.11
    1526-B, *1400  (0) 2021.08.10
    1557-A, *800  (0) 2021.08.10
    1557-B, *1100  (0) 2021.08.10

    댓글

Designed by Tistory.