7 - 2 수강 신청 학생 명단 인쇄 (vector 사용)

전교 에 최대 40000 명의 학생 과 최대 2500 개의 과정 이 있다 고 가정 하 자.현재 각 학생 의 수강 신청 명세 서 를 제시 하고 각 과목 의 수강 신청 학생 명단 을 출력 하도록 요구한다.
입력 형식: 입력 한 첫 줄 은 두 개의 정수 입 니 다. N (≤ 40000) 은 전교 학생 총수 입 니 다.K (≤ 2500), 총 과정 수 입 니 다.이후 N 줄 은 각 줄 에 학생 이름 (대문자 3 개 + 1 자리 숫자), 정수 C (≤ 20) 가 해당 학생 이 선택 한 과정 문 수 를 대표 하고 그 다음 에 C 개의 과정 번 호 를 포함한다.간단하게 말하자면 수업 은 1 부터 K 번호 까지 이다.
출력 형식: 순차 출력 과정 1 부터 K 까지 의 수강 신청 학생 명단.형식 은 모든 과목 에 대해 먼저 한 줄 에 과정 번호 와 수강 신청 학생 총수 (사이 에 빈 칸 으로 구분) 를 출력 한 다음 에 두 번 째 줄 에 사전 순서에 따라 학생 명단 을 출력 하고 각 학생 의 이름 이 한 줄 을 차지한다.
입력 샘플: 105 ZOE 1 2 4 5 ANN 0 3 5 2 1 BOB 5 3 4 1 5 JOE 4 1 2 JAY 9 4 1 2 5 4 FRA 8 3 4 2 5 DON 2 2 4 5 AMY 7 1 5 KAT 3 5 4 2 LOR 6 4 2 4 1 5
출력 예시: 14 ANN 0 BOB 5 JAY 9 LOR 6 2 7 ANN 0 BOB 5 FRA 8 JAY 9 JOE 4 KAT 3 LOR 6 3 1 BOB 5 4 7 BOB 5 DON 2 FRA 8 JAY 9 KAT 3 LOR 6 ZOE 1 5 9 AMY 7 ANN 0 BOB 5 DON 2 FRA 8 JAY 9 KAT 3 LOR 6 ZOE 1
vector v [N] 에 각 과목 에 어떤 학생 들 이 신청 을 했 는 지 저장 합 니 다.
#include 
#include 
#include 
#include 
using namespace std;

const int N = 1e5 + 10;
vector<string> v[N];
string s;

int main()
{
    int n, m;
    cin >> n >> m;
    while(n -- )
    {
        cin >> s;
        int t;
        cin >> t;
        while(t -- )
        {
            int x;
            cin >> x;
            v[x].push_back(s);
        }
    }
    
    for(int i = 1; i <= m; i ++ )
    {
        printf("%d %d
"
, i, (int)v[i].size()); sort(v[i].begin(), v[i].end()); for(int j = 0; j < v[i].size(); j ++ ) printf("%s
"
, v[i][j].c_str()); } return 0; }

좋은 웹페이지 즐겨찾기