这类题目是C++标准模板库的使用,是重点知识。
题目描述如下:
题目大致意思:
给出来N个学生和K门课程,然后给出选某门课程的学生姓名,最后给出N个学生的姓名,输出每个学生选的课程数和课程编号。
大致思路:
可以用set< string > name,来存储选某门课程的学生姓名,用vector<set< string > >来存储所有的选课信息,用vector< int >来存储某个学生选课的信息,根据输入的查询。
提交结果如下:
有一个测试用例运行超时,放在第二轮刷题时解决。
提交的代码如下:
#include<iostream>
#include<vector>
#include<cstdio>
#include<set>
using namespace std;
int main()
{
int n,k;
cin >> n >> k;
vector<set<string> >arr(k);
for (int i = 0;i < k;i++)
{
int index, number;
cin >> index >> number;
set<string> course;
for (int j = 0;j < number;j++)
{
string name;
cin >> name;
course.insert(name);
}
arr[index - 1] = course;
}
for (int i = 0;i < n;i++)
{
string name;
cin >> name;
vector<int> ans;
int num = 0;
for (int j = 0;j < k;j++)
{
if (arr[j].find(name) != arr[j].end())
{
num++;
ans.push_back(j + 1);
}
}
if (ans.size() != 0) //这里有一个需要注意的地方,当ans.size()=0时,ans.size()-1=一个很大的数,并不是-1
{
cout << name << " " << num << " ";
for (int j = 0;j < ans.size() - 1;j++)
cout << ans[j] << " ";
cout << ans[ans.size() - 1] << endl;
}
else
{
cout << name << " " << num<<endl;
}
}
}
本次提交后累计得分1141。