代码没AC,但记录下map和vector两种容器的使用,争取熟练掌握!
要求:
http://codeup.cn/problem.php?cid=100000596&pid=0
代码:
#include <stdio.h>
#include <map>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
map<string,int>mp;
vector<int>vc[40005];
int ans[40005];
int main(){
int n,k;
scanf("%d %d",&n,&k);
int cnt,course;
int signal = 1; //作为每个学生的唯一标志
for(int i = 0;i <k;i++){
scanf("%d %d",&course,&cnt);
for(int j = 0;j <cnt;j++){
string linshi;
cin>>linshi;
map<string,int>::iterator it = mp.find(linshi);
if(it->second >0){
vc[it->second].push_back(course);
}
else{
mp[linshi] = signal;
vc[signal].push_back(course); //给这个学生加课程
signal++;
}
}
}
string shuchu[n];
for(int i = 0;i <n;i++){
cin>>shuchu[i];
}
for(int i = 0;i <n;i++){
int t;
t = mp[shuchu[i]];
cout<<shuchu[i]<<" "<<vc[t].size()<<" ";
int length = vc[t].size();
for(int j = 0;j <length;j++){
ans[j] = vc[t][j];
}
sort(ans,ans + length);
for(int j = 0;j <length;j++){
printf("%d ",ans[j]);
}
memset(ans,0,sizeof(ans)); //重置
if(i < n -1){
printf("\n");
}
}
}
要求2:
http://codeup.cn/problem.php?cid=100000596&pid=1
这一题AC了,看来应该是时间复杂度的问题
代码:
#include <stdio.h>
#include <map>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
//map<string,int>mp;
vector<string>vc[2510];
int main(){
int stunum,counum;
scanf("%d %d",&stunum,&counum);
for(int i = 0;i <stunum;i++){
string str;
int num;
cin>>str;
scanf("%d",&num);
int course;
for(int j = 0;j <num;j++){
scanf("%d",&course);
vc[course].push_back(str);
}
}
int signal; //标志
for(int i = 1;i <=counum;i++){
string ans[2510];
signal = 0;
printf("%d %d\n",i,vc[i].size());
for(int j = 0;j <vc[i].size();j++){
ans[signal] = vc[i][j];
signal++;
}
sort(ans,ans+signal);
for(int j = 0;j <signal;j++){
cout<<ans[j];
if(j <signal - 1){
printf("\n");
}
}
if(i != counum){
printf("\n");
}
}
}