Digital Library(两种做法)

题目

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are supposed to output the resulting books, sorted in increasing order of their ID’s.

Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (≤10​4​​ ) which is the total number of books. Then N blocks follow, each contains the information of a book in 6 lines:

Line #1: the 7-digit ID number;
Line #2: the book title – a string of no more than 80 characters;
Line #3: the author – a string of no more than 80 characters;
Line #4: the key words – each word is a string of no more than 10 characters without any white space, and the keywords are separated by exactly one space;
Line #5: the publisher – a string of no more than 80 characters;
Line #6: the published year – a 4-digit number which is in the range [1000, 3000].
It is assumed that each book belongs to one author only, and contains no more than 5 key words; there are no more than 1000 distinct key words in total; and there are no more than 1000 distinct publishers.

After the book information, there is a line containing a positive integer M (≤1000) which is the number of user’s search queries. Then M lines follow, each in one of the formats shown below:

1: a book title
2: name of an author
3: a key word
4: name of a publisher
5: a 4-digit number representing the year

Output Specification:
For each query, first print the original query in a line, then output the resulting book ID’s in increasing order, each occupying a line. If no book is found, print Not Found instead.

Sample Input:

3
1111111
The Testing Book
Yue Chen
test code debug sort keywords
ZUCS Print
2011
3333333
Another Testing Book
Yue Chen
test code sort keywords
ZUCS Print2
2012
2222222
The Testing Book
CYLL
keywords debug book
ZUCS Print2
2011
6
1: The Testing Book
2: Yue Chen
3: keywords
4: ZUCS Print
5: 2011
3: blablabla

Sample Output:

1: The Testing Book
1111111
2222222
2: Yue Chen
1111111
3333333
3: keywords
1111111
2222222
3333333
4: ZUCS Print
1111111
5: 2011
1111111
2222222
3: blablabla
Not Found

答案

常规处理

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
struct Node{
	string num;
	string title;
	string author;
	string keywords[5];
	string publisher;
	string year;
}; 
bool cmp(Node x,Node y){
	return x.num<y.num;
}
int main()
{
	int n;
	cin>>n;
	getchar();
	Node node[n];
	for(int i=0;i<n;i++)
	{
		getline(cin,node[i].num);
		getline(cin,node[i].title);
		getline(cin,node[i].author);
		int k=0;
		while(cin>>node[i].keywords[k++])
		{
			if(getchar()=='\n') break;
		}
		getline(cin,node[i].publisher);
		getline(cin,node[i].year);
	}
	sort(node,node+n,cmp);
	int m;
	cin>>m;
	getchar();
	while(m--)
	{
		int flag=1;
		string tmp1,tmp2;
		cin>>tmp1;
		getchar();
		getline(cin,tmp2);
		cout<<tmp1<<" "<<tmp2<<endl;
		if(tmp1[0]=='1')
		{
			for(int i=0;i<n;i++)
			if(node[i].title==tmp2) 
			{
				cout<<node[i].num<<endl;
				flag=0;
			}
		}
		else if(tmp1[0]=='2')
		{
			for(int i=0;i<n;i++)
			if(node[i].author==tmp2) 
			{
				cout<<node[i].num<<endl;
				flag=0;
			}
		}
		else if(tmp1[0]=='3')
		{
			for(int i=0;i<n;i++)
			{
				for(int j=0;j<5;j++)
				{
					if(node[i].keywords[j]==tmp2)
					{
						cout<<node[i].num<<endl;
						flag=0;
						break;
					}
				}
			}
		}
		else if(tmp1[0]=='4')
		{
			for(int i=0;i<n;i++)
			if(node[i].publisher==tmp2) 
			{
				cout<<node[i].num<<endl;
				flag=0;
			}
		}
		else if(tmp1[0]=='5')
		{
			for(int i=0;i<n;i++)
			if(node[i].year==tmp2) 
			{
				cout<<node[i].num<<endl;
				flag=0;
			}
		}
		if(flag) cout<<"Not Found"<<endl;
	}
}

答案二(使用map)

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

map<string,set<int> > title,author,key,pub,year;

void query(map<string,set<int> >& mp, string &str)
{
	if(mp.find(str)!=mp.end())
	{
		for(set<int>::iterator it=mp[str].begin();it!=mp[str].end();it++)
		printf("%07d\n",*it);
	}
	else cout<<"Not Found"<<endl;
}

int main()
{
	int n,m,id,num;
	cin>>n;
	string _title,_author,_key,_pub,_year;
	for(int i=0;i<n;i++)
	{
		cin>>id;
		getchar();
		getline(cin,_title); title[_title].insert(id);
		getline(cin,_author); author[_author].insert(id);
		while(cin>>_key)
		{
			key[_key].insert(id);
			if(getchar()=='\n') break;
		}
		getline(cin,_pub); pub[_pub].insert(id);
		getline(cin,_year); year[_year].insert(id);
	}
	cin>>m;
	while(m--)
	{
		scanf("%d: ",&num);
		string str;
		getline(cin,str);
		cout<<num<<": "<<str<<endl;
		if(num==1) query(title,str);
		else if(num==2) query(author,str);
		else if(num==3) query(key,str);
		else if(num==4) query(pub,str);
		else if(num==5) query(year,str);
	}
}

总结

第二个答案我参考了这篇文章——Digital Library (30 分),这篇文章的思路很好,推荐大家去看一下

需要注意的就是数字和字符串、字符交叉输入时,输入数字后要记得getchar(),否则数字后的空格或回车就会被输入到下一个字符串、字符中,造成输入错误

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 你可以在以下几个地方寻找社团管理系统的英文文献: 1. 学术搜索引擎:Google Scholar、ACM Digital Library、IEEE Xplore、SpringerLink等都是优秀的学术搜索引擎,你可以在这些网站上搜索相关的论文和期刊文章。 2. 学术会议和期刊:社团管理系统是一个比较热门的话题,许多学术会议和期刊都有相关的研究成果发表,你可以关注相关的学术会议和期刊,寻找相关的论文和文章。 3. 学术论坛和社交媒体:有些学者和研究人员会在学术论坛或社交媒体上分享他们的研究成果,你可以在这些平台上寻找相关的信息。 4. 学校图书馆:如果你是在学校里学习,那么学校图书馆是一个非常好的资源,你可以在图书馆的数据库中搜索相关的文献。 ### 回答2: 要找关于社团管理系统的英文文献,可以尝试以下途径: 1. 学术数据库:许多学术数据库如Google 学术、PubMed、Scopus等提供了大量的学术文献资源。可通过输入关键词"club management system"或相关的关键词查找相关文献。可以查看摘要和全文,以确定是否适合你的研究需要。 2. 图书馆资源:学校或公共图书馆通常会提供书籍和期刊杂志,包含了各个领域的主题。你可以前往图书馆的学术图书馆部门或者在线图书馆目录,在搜索栏中输入相关关键词查找相关文献。 3. 学术期刊:一些学术期刊专注于发布与计算机科学、信息管理相关的研究论文,其中可能包含关于社团管理系统的研究。你可以通过在搜索引擎中输入关键词来查找这些期刊,并阅读其中关于社团管理系统的论文。 4. 学术研讨会和会议:学术研讨会和会议通常会发布与研究领域相关的最新论文集。你可以在计算机科学或信息管理领域的会议网站上查找与社团管理系统相关的会议和研讨会,并浏览其中的论文集。 最好的方式是同时使用上述途径,以确保你能够找到多样化的文献资源,从而获得关于社团管理系统的全面信息。同时,确保筛选出的文献来源可靠、可信。 ### 回答3: 如果你想找两篇关于社团管理系统的英文文献,有几种途径可以尝试。 首先,你可以使用学术搜索引擎。常用的学术搜索引擎包括Google学术、PubMed和IEEE Xplore等。在搜索引擎的搜索栏中输入关键词,如"社团管理系统"、"community management system"或"club management system",然后浏览搜索结果,筛选出与你所需的文献相关的内容。 其次,你可以去图书馆的学术资源中心或数字图书馆进行查询。你可以使用图书馆提供的专业学术数据库,如ProQuest、EBSCOhost或JSTOR等。通过在这些数据库中搜索关键词,你可以找到与社团管理系统相关的学术论文、期刊文章和会议论文等。 另外,你还可以参考研究领域的权威机构和会议的网站。例如,如果你对计算机科学方向的社团管理系统感兴趣,你可以查看ACM(Association for Computing Machinery)的会议和论文数据库,以便找到相关的研究成果。 总之,无论是使用学术搜索引擎、图书馆的学术资源中心还是查阅学术会议和机构的网站,你都能找到与社团管理系统相关的英文文献。别忘了使用适当的关键词,以便快速准确地找到你所需的文献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值