PAT A1039 Course List for Student
Sample Input:
11 5
4 7
BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
1 4
ANN0 BOB5 JAY9 LOR6
2 7
ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6
3 1
BOB5
5 9
AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6 NON9
Sample Output:
ZOE1 2 4 5
ANN0 3 1 2 5
BOB5 5 1 2 3 4 5
JOE4 1 2
JAY9 4 1 2 4 5
FRA8 3 2 4 5
DON2 2 4 5
AMY7 1 5
KAT3 3 2 4 5
LOR6 4 1 2 4 5
NON9 0
-
A1047逆命题
-
思路 1:
用一个vector数组在读入时记录每个学生的选课,再查询,输出 -
code 1:
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int M = 26*26*26*10 + 1;
vector<int> course[M];
int change(char s[]){
int id = 0;
for(int i = 0; i < 3; ++i){
id = id * 26 + (s[i]-'A');
}
id = id * 10 + (s[3] - '0');
return id;
}
int main(){
int n, m;
scanf("%d %d", &n, &m);
int nC, nP;
char name[5];
for(int i = 0; i < m; ++i){
scanf("%d %d", &nC, &nP);
for(int i = 0; i < nP; ++i){
scanf("%s", name);
int id = change(name);
course[id].push_back(nC);
}
}
for(int i = 0; i < n; ++i){
scanf("%s", name);
int id = change(name);
printf("%s ", name);
sort(course[id].begin(), course[id].end());
int len = course[id].size();
printf("%d", len);
for(int j = 0; j < len; ++j){
printf(" %d", course[id][j]); //!!!:TIPS 1:前面有内容的格式化输出
}
printf("\n");
}
return 0;
}
-
思路:直接map 超时边缘试探…
-
T2 code:
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, vector<int> > mp;
int main(){
int n, m;
scanf("%d %d", &n, &m);
for(int i = 0; i < m; ++i){
int idex, cnt;
scanf("%d %d", &idex, &cnt);
for(int j = 0; j < cnt; ++j){
string name;
cin >> name;
mp[name].push_back(idex);
}
}
for(int i = 0; i < n; ++i){
string q_name;
cin >> q_name;
cout << q_name << " " << mp[q_name].size() ;
sort(mp[q_name].begin(), mp[q_name].end());
for(int j = 0; j < mp[q_name].size(); ++j){
printf(" %d", mp[q_name][j]);
}
cout << endl;
}
return 0;
}
- T3 code:
#include <bits/stdc++.h>
using namespace std;
unordered_map<int, set<int> > mp;
int Change(char s[])
{
int id = 0;
for(int i = 0; i < 3; ++i)
{
id = id * 26 + (s[i] - 'A');
}
return id * 10 + (s[3] - '0'); // 别忘了 * 10
}
int main()
{
int nq, n;
scanf("%d %d", &nq, &n);
for(int i = 0; i < n; ++i)
{
int idex, np;
scanf("%d %d", &idex, &np);
for(int j = 0; j < np; ++j)
{
char name[5];
scanf("%s", name);
mp[Change(name)].insert(idex);
}
}
for(int i = 0; i < nq; ++i)
{
char qname[5];
scanf("%s", qname);
int id = Change(qname);
printf("%s %d", qname, mp[id].size());
for(auto it = mp[id].begin(); it != mp[id].end(); ++it)
{
printf(" %d", *it);
}
printf("\n");
}
return 0;
}