代碼沒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");
}
}
}