(算法練習)——STL容器vector、map的使用

代碼沒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");
		}
		
	}	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章