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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    // Przechowujemy pary (can, x) dla zawodników
    // Indeks w wektorze jest 0-based, ale numer zawodnika = i + 1
    vector<pair<bool,int>> zawodnicy(n);
    
    for(int i = 0; i < n; i++){
        char s[4];     // wystarczy tablica, by wczytać "TAK" lub "NIE"
        int x;
        scanf("%s %d", s, &x);
        
        bool can = (strcmp(s, "TAK") == 0);
        zawodnicy[i] = make_pair(can, x);
    }
    
    // KROK 1: Zbierzmy indeksy tych, którzy mają can = true (TAK)
    vector<int> dostepni;
    dostepni.reserve(n);
    for(int i = 0; i < n; i++){
        if(zawodnicy[i].first) {
            dostepni.push_back(i);
        }
    }
    
    // KROK 2: Pierwsza dziesiątka – pierwsze 10 z listy 'dostepni'
    vector<int> finalisci1;  // indeksy zawodników (0-based)
    finalisci1.reserve(10);
    for(int i = 0; i < 10; i++) {
        finalisci1.push_back(dostepni[i]);
    }
    
    // KROK 3: Druga dziesiątka
    //  - rozpatrujemy dalszą część listy dostepni (po 10. elemencie)
    //  - omijamy zawodników z x >= 2
    //  - bierzemy 10 pierwszych spełniających powyższe
    vector<int> finalisci2;
    finalisci2.reserve(10);
    for(int i = 10; i < (int)dostepni.size(); i++){
        int idx = dostepni[i];
        if(zawodnicy[idx].second < 2) {
            finalisci2.push_back(idx);
            if((int)finalisci2.size() == 10) {
                break;
            }
        }
    }
    
    // Łączymy dwie dziesiątki
    vector<int> finalisci;
    finalisci.reserve(20);
    for(int x : finalisci1) finalisci.push_back(x);
    for(int x : finalisci2) finalisci.push_back(x);
    
    // Sortujemy po numerach zawodników (indeks + 1)
    sort(finalisci.begin(), finalisci.end());
    
    // Wypisujemy 20 finalistów w porządku rosnącym
    // Numer zawodnika to index + 1
    for(int i = 0; i < 20; i++){
        printf("%d", finalisci[i] + 1);
        if(i < 19) printf(" ");
    }
    printf("\n");
    
    return 0;
}