1047. Student List for Course

来源:互联网 发布:品牌网络推广计划书 编辑:程序博客网 时间:2024/05/17 08:27

题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1047

建表、排序

#include <stdio.h>#include <iostream>#include <string>#include <vector>#include <algorithm>#define SIZE 2500+5using namespace std;vector<string> course[SIZE];int n, k;void Input(){scanf("%d%d", &n, &k);char s[10];int m;while(n-->0){scanf("%s %d", s, &m);string name=s;for(int i=0; i<m; i++){int id;scanf("%d", &id);course[id].push_back(name);}}}int main(){#ifdef ONLINE_JUDGE#elsefreopen("E:\\in.txt", "r", stdin);#endifInput();// sort & outputfor(int i=1; i<= k; i++){sort(course[i].begin(), course[i].end());printf("%d %d\n", i, course[i].size());int j;for(j=0; j<course[i].size(); j++){printf("%s\n", course[i][j].c_str());}}return 0;}// vector 没有办法直接存放数组,即vector<char [10]> v;这种是错误的。// 如果仅仅存放数组,可以先定义一个结构体。入下代码:#include <stdio.h>#include <string.h>#include <vector>#include <algorithm>#define SIZE 2500+5using namespace std;struct Name{char name[10];bool operator < (const Name & A) const{return strcmp(name, A.name) < 0;}};vector<Name> clist[SIZE];int n, k;int main(){#ifdef ONLINE_JUDGE#elsefreopen("E:\\in.txt", "r", stdin);#endifscanf("%d%d", &n, &k);int i;for(i=0; i<n; i++){char s[10];int m;Name name;scanf("%s%d", s, &m);strcpy(name.name, s);while(m-->0){int t;scanf("%d", &t);clist[t].push_back(name);}}// sort and outputfor(i=1; i<=k; i++){sort(clist[i].begin(), clist[i].end());printf("%d %d\n", i, clist[i].size());for(int j=0; j<clist[i].size(); j++){printf("%s\n", clist[i][j].name);}}return 0;}


0 0
原创粉丝点击