1022_Digital_Library (30分)

這裏提供兩種寫法, 其實都是一樣的,第一種比較快。

#include <bits/stdc++.h>
using namespace std;

map<string,set<string> > mp[6];

int main()
{
	//freopen("in.txt","r",stdin);
	ios::sync_with_stdio(false);
	int N;
	cin>>N;
	cin.get();
	string ID,auth,title,puber,keywords,year;
	for (int i=0;i<N;i++) {
		getline(cin,ID);
		getline(cin,title);
		mp[1][title].insert(ID);
		getline(cin,auth);
		mp[2][auth].insert(ID);
		getline(cin,keywords);
		stringstream ss(keywords);
		string key;
		while (ss>>key) {
			mp[3][key].insert(ID);
		}
		getline(cin,puber);
		mp[4][puber].insert(ID);
		getline(cin,year);
		mp[5][year].insert(ID);
		// cout<<ID<<title<<auth<<keywords<<puber<<year<<endl;
	}
	int M;
	cin>>M;
	int num;
	string query;
	for (int i=0;i<M;i++) {
		cin>>num;
		cin.get();
		cin.get();
		getline(cin,query);
	
		set<string> ans=mp[num][query];
		cout<<num<<": "<<query<<endl;
		if (ans.empty())
			cout<<"Not Found"<<endl;
		else 
			for (set<string>::iterator it=ans.begin();it!=ans.end();it++) cout<<*it<<endl;
	}
	return 0;
}

第二種:

#include <bits/stdc++.h>
using namespace std;

map<pair<int,string>,set<string> >mp;

int main()
{
	// freopen("in.txt","r",stdin);
	ios::sync_with_stdio(false);
	int N;
	cin>>N;
	cin.get();
	string title,author,key,puber,year,ID;	
	for (int i=0;i<N;i++) {
		getline(cin,ID);
		getline(cin,title);
		mp[make_pair(1,title)].insert(ID);
		getline(cin,author);
		mp[make_pair(2,author)].insert(ID);
		getline(cin,key);
		stringstream ss(key);
		string tmp;
		while (ss>>tmp) {
			mp[make_pair(3,tmp)].insert(ID);
		}
		getline(cin,puber);
		mp[make_pair(4,puber)].insert(ID);
		getline(cin,year);
		mp[make_pair(5,year)].insert(ID);
		// cout<<ID<<" "<<title<<" "<<author<<" "<<key<<" "<<puber<<" "<<year<<endl;
	}
	int M;
	cin>>M;
	int n;
	string query;
	for (int i=0;i<M;i++) {
		cin>>n;
		cin.get();
		cin.get();
		getline(cin,query);
		// cout<<n<<query<<endl;
		set<string> ans=mp[make_pair(n,query)];
		cout<<n<<": "<<query<<endl;
		if (ans.empty()) {
			cout<<"Not Found"<<endl;
		}
        else {
            for (set<string>::iterator it=ans.begin();it!=ans.end();it++) {
			    cout<<*it<<endl;
		    }
        }
		
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章