题目描述
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.
输入
Each input file contains one test case. For each case, the first line contains a positive integer N (≤
1
0
4
10^4
104) 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
输出
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.
思路
麻烦的查询题,其实就是根据条件遍历即可。
代码
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct node {
int ID;
char title[100];
char author[100];
char keyword[1001];
char publisher[100];
char year[10];
}Book;
Book lib[10001];
bool cmp(Book a, Book b)
{
return a.ID < b.ID;
}
int main()
{
int N;
scanf("%d", &N);
for (int i = 0; i <N; i++)
{
scanf("%d", &lib[i].ID);
getchar();
cin.getline(lib[i].title, 100);
cin.getline(lib[i].author, 100);
cin.getline(lib[i].keyword, 1001);
cin.getline(lib[i].publisher, 100);
cin.getline(lib[i].year, 10);
}
sort(lib, lib + N, cmp);
int M;
scanf("%d", &M);
getchar();
for (int i = 0; i < M; i++)
{
char str[100] = { 0 };
char op[100] = { 0 };
char nr[100] = { 0 };
cin.getline(str, 100);
printf("%s\n",str);
int j = 0;
for (int i = 3; str[i] != 0; i++)
{
nr[j++] = str[i];
}
if (str[0] == '1')
{
int flag = 0;
for (int k = 0; k < N; k++)
{
if (strcmp(lib[k].title, nr) == 0)
{
printf("%07d\n", lib[k].ID);
flag = 1;
}
}
if (flag == 0)
{
printf("Not Found\n");
}
}
if (str[0] == '2')
{
int flag = 0;
for (int k = 0; k < N; k++)
{
if (strcmp(lib[k].author, nr) == 0)
{
printf("%07d\n", lib[k].ID);
flag = 1;
}
}
if (flag == 0)
{
printf("Not Found\n");
}
}
if (str[0] == '3')
{
int flag = 0;
for (int k = 0; k < N; k++)
{
for (int l = 0; lib[k].keyword[l] != 0; l++)
{
if (lib[k].keyword[l] == nr[0])
{
if (l != 0)
{
if (lib[k].keyword[l - 1] == ' ')
{
int pan = 1;
int m = l;
for (int o = 0; o < strlen(nr); o++)
{
if (nr[o] != lib[k].keyword[m++]) {
pan = 0;
break;
}
}
if (pan == 1)
{
printf("%07d\n", lib[k].ID);
flag = 1;
break;
}
}
}
else
{
int pan = 1;
int m = l;
for (int o = 0; o < strlen(nr); o++)
{
if (nr[o] != lib[k].keyword[m++]) {
pan = 0;
break;
}
}
if (pan == 1)
{
printf("%07d\n", lib[k].ID);
flag = 1;
break;
}
}
}
}
}
if (flag == 0)
{
printf("Not Found\n");
}
}
if (str[0] == '4')
{
int flag = 0;
for (int k = 0; k < N; k++)
{
if (strcmp(lib[k].publisher, nr) == 0)
{
printf("%07d\n", lib[k].ID);
flag = 1;
}
}
if (flag == 0)
{
printf("Not Found\n");
}
}
if (str[0] == '5')
{
int flag = 0;
for (int k = 0; k < N; k++)
{
if (strcmp(lib[k].year, nr)==0)
{
printf("%07d\n", lib[k].ID);
flag = 1;
}
}
if (flag == 0)
{
printf("Not Found\n");
}
}
}
}