题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1047
建表、排序
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define SIZE 2500+5
using 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
#else
freopen("E:\\in.txt", "r", stdin);
#endif
Input();
// sort & output
for(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+5
using 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
#else
freopen("E:\\in.txt", "r", stdin);
#endif
scanf("%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 output
for(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;
}