PTA 7 - 47 수강 신청 학생 명단 인쇄

본 문제 의 시험 지점:
  • 정렬 의 응용
  • 전교 에 최대 40000 명의 학생 과 최대 2500 개의 과정 이 있다 고 가정 하 자.현재 각 학생 의 수강 신청 명세 서 를 제시 하고 각 과목 의 수강 신청 학생 명단 을 출력 하도록 요구한다.입력 형식: 입력 한 첫 줄 은 두 개의 정수 입 니 다. N (≤ 40000) 은 전교 학생 총수 입 니 다.K (≤ 2500), 총 과정 수 입 니 다.이후 N 줄 은 각 줄 에 학생 이름 (대문자 3 개 + 1 자리 숫자), 정수 C (≤ 20) 가 해당 학생 이 선택 한 과정 문 수 를 대표 하고 그 다음 에 C 개의 과정 번 호 를 포함한다.간단하게 말하자면 수업 은 1 부터 K 번호 까지 이다.
    이 문 제 는 직접 vector 로 저장 하면 됩 니 다. 그러나 데이터 양 이 많 을 때 cin,cout 입 출력 에 사용 하 는 것 은 적절 하지 않 습 니 다. 이 럴 때 scanf,printf 입 출력 을 처리 하 는 방법 을 선택해 야 합 니 다.
    전체 코드 는 다음 과 같 습 니 다.
    
    #include 
    #include 
    #include 
    #include 
    #define LOCAL
    using namespace std;
    
    #define MAXN 2510
    
    vector lists[MAXN];
    
    int main()
    {
    #ifdef LOCAL
        freopen("data.txt", "r", stdin);
    #endif
        int N, K;
        scanf("%d%d", &N, &K);
        getchar();
        string name;
        char nameChar[5];
        int cnt, classId;
        for (int i = 0; i < N; i++)
        {
            scanf("%s", nameChar);
            name = string(nameChar);
            scanf("%d", &cnt);
            while (cnt--)
            {
                scanf("%d", &classId);
                lists[classId].push_back(name);
            }
            getchar();
        }
        int len;
        for (int i = 1; i <= K; i++)
        {
            sort(lists[i].begin(), lists[i].end());
            printf("%d %d
    ", i, lists[i].size()); for (int j = 0; j < lists[i].size(); j++) { // len = lists[i][j].copy(nameChar, lists[i][j].size()); printf("%s
    ", nameChar); } } return 0; }

    좋은 웹페이지 즐겨찾기