A1047

本题比较容易,直接ac了
最后一个测试点用时780ms

#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
vector<string> course[2501];                  
bool cmp(string a,string b){
	return a<b;
}
int main(){
	#ifdef ONLINE_JUDGE
	#else
		freopen("1.txt","r",stdin);
	#endif
	int n,k,c;
	char name[5];
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++){
		scanf("%s %d",name,&c);
		string str=name;
		for(int j=0;j<c;j++){                  
			int temp;
			scanf("%d",&temp);
			course[temp].push_back(str);                       //往课程中添加选该课程的学生 
		}
	}
	for(int i=1;i<=k;i++){
		int lenC=course[i].size();
		printf("%d %d\n",i,lenC);
		sort(course[i].begin(),course[i].end(),cmp);
		for(int j=0;j<lenC;j++){
			printf("%s\n",course[i][j].c_str());
		}
	}
	return 0;
}

用字符数组代替字符串(虽然vector不能放字符数组类型,但可以借助在外面定义字符数组类型,通过整型来充当两者的中介,间接实现):
最后一个测试点用时262ms

#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
vector<int> course[2501];     
char stu[40001][5];
bool cmp(int a,int b){                    //根据字符数组大小比较来间接排序vector里的整数 
	return strcmp(stu[a],stu[b])<0;
}             
int main(){
	#ifdef ONLINE_JUDGE
	#else
		freopen("1.txt","r",stdin);
	#endif
	int n,k,c;
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++){                     //每个学生对应stu数组中不同的下标,只要将下标记录在course数组中,相当于记录了学生名字 
		scanf("%s %d",stu[i],&c);
		for(int j=0;j<c;j++){
			int temp;
			scanf("%d",&temp);
			course[temp].push_back(i);
		}
	}
	for(int i=1;i<=k;i++){
		printf("%d %d\n",i,course[i].size());
		sort(course[i].begin(),course[i].end(),cmp);
		for(int j=0;j<course[i].size();j++){
			printf("%s\n",stu[course[i][j]]);
		}
	}
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章