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