(算法练习)——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");
		}
		
	}	
}

猜你喜欢

转载自blog.csdn.net/weixin_42377217/article/details/104395700