문제는 아래 첨부 파일 참고하세요.

 

e2.pdf
0.19MB

등수의 범위를 알고자 하는 학생(x)을 기준으로, 

- 확실히 등수가 높은 학생 리스트 (아래 코드에서 up vector, x학생 포함)

- 확실히 등수가 낮은 학생 리스트 (아래 코드에서 down vector, x학생 포함)

 

아래 소스코드는 up/down vector에 학생 번호가 중복되어 있으면 삭제해서, unique(유일하게) 하는 코드 입니다.

    sort(up.begin(), up.end());
    up.erase(unique(up.begin(), up.end()), up.end());

    sort(down.begin(), down.end());
    down.erase(unique(down.begin(), down.end()), down.end());

불러오는 중입니다...

 

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, x;
    vector<int> up;
    vector<int> down;

    scanf_s("%d %d %d", &n, &m, &x);
    int input[1000000][2];

    for (int i = 0; i < m; i++) {
        scanf_s("%d %d", &input[i][0], &input[i][1]);
    }

    up.push_back(x);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < up.size(); j++) {
            if (input[i][1] == up[j]) {
                up.push_back(input[i][0]);
            }
        }
    }
    down.push_back(x);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < down.size(); j++) {
            if (input[i][0] == down[j]) {
                down.push_back(input[i][1]);
            }
        }
    }

    sort(up.begin(), up.end());
    up.erase(unique(up.begin(), up.end()), up.end());

    sort(down.begin(), down.end());
    down.erase(unique(down.begin(), down.end()), down.end());


    printf("%d %d", up.size(), n - down.size()+1);
    return 0;
}

+ Recent posts