TZOJ 5280 搜索引擎(模拟字符串)

描述

谷歌、百度等搜索引擎已经成为了互连网中不可或缺的一部分。在本题中,你的任务也是设计一个搜索论文的搜索引擎,当然,本题的要求比起实际的需求要少了许多。 

本题的输入将首先给出一系列的论文,对于每篇论文首先给出标题,然后给出它被引用的次数。然后会有一系列的搜索询问,询问标题中包含特定关键词的论文有哪些。 

每一个询问包含一个关键词词(一个单词),你需要找出标题包含关键词的论文。 

“包含”必须是标题中有一个词正好是给定的关键词,不区分大小写。 

对每个询问,都按被引用的次数从多到少输出满足条件的论文的标题。如果有被引用的次数相同的论文,则按照论文在输入中的顺序排列,先给出的论文排在前面。

输入

输入包含多组数据。 

每组数据首先有一行包含一个整数N(1 ≤ N ≤ 1000),表示论文的数目,N = 0表示输入结束。每组论文的信息第一行是论文的标题,由字母(大小写均可)和空格组成,不超过10个词,每个词不超过20个字符,标题总共不超过250个字符。第二行是一个整数K(0  ≤ K ≤ 200),表示它被引用的次数。在论文信息结束以后,有一行包含一个整数M(1 ≤ M ≤ 100),表示询问的数目。接下来有M行,每行是一个询问,由一个单词构成,每个词不超过20个字符。

输出

对每个询问,按题目给定的顺序输出满足条件的论文的标题;如果没有满足条件的论文,就不输出。在每组询问的输出后输出一行”***”,在每组数据的输出之后输出一行”---”。

样例输入

6
Finding the Shortest Path
120
Finding the k Shortest Path
80
Find Augmenting Path in General Graph
80
Matching in Bipartite Graph
200
Finding kth Shortest Path
50
Graph Theory and its Applications
40
5
Shortest
Graph
Path
find
Application
0

样例输出

Finding the Shortest Path
Finding the k Shortest Path
Finding kth Shortest Path
***
Matching in Bipartite Graph
Find Augmenting Path in General Graph
Graph Theory and its Applications
***
Finding the Shortest Path
Finding the k Shortest Path
Find Augmenting Path in General Graph
Finding kth Shortest Path
***
Find Augmenting Path in General Graph
***
***
---

题意

如上

题解

模拟,详情看代码

代码

这个代码不是很好,for嵌套有点多

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 struct lw//论文
 7 {
 8     char word[251];
 9     int use,mem;//use使用的次数,mem编号
10 }a[1001];
11 bool cmp(lw a,lw b)
12 {
13     if(a.use>b.use)//使用多的放前面
14         return true;
15     else if(a.use==b.use)
16         if(a.mem<b.mem)//编号小的放前面
17             return true;
18     return false;
19 }
20 int main()
21 {
22     int n,m;
23     while(scanf("%d",&n)!=EOF,n)
24     {
25         getchar();
26         for(int i=0;i<n;i++)
27         {
28             gets(a[i].word);
29             scanf("%d",&a[i].use);
30             getchar();
31             a[i].mem=i;
32         }
33         sort(a,a+n,cmp);//排序
34         scanf("%d",&m);
35         char wd[21];
36         for(int i=0;i<m;i++)
37         {
38             scanf("%s",wd);
39             int l=strlen(wd);
40             for(int j=0;j<n;j++)
41             {
42                 int kk=0;//长度
43                 char word[251];
44                 for(int k=0;a[j].word[k];k++)
45                 {
46                     if(a[j].word[k]!=' ')
47                     {
48                         word[kk++]=a[j].word[k];
49                     }
50                     else
51                     {
52                         word[kk]='\0';
53                         if(kk==l)//长度相等
54                             if(stricmp(word,wd)==0)//stricmp不区分大小写
55                                 puts(a[j].word);
56                         kk=0;
57                     }
58                 }
59                 word[kk]='\0';
60                 if(kk==l)
61                     if(stricmp(word,wd)==0)
62                         puts(a[j].word);
63             }
64             puts("***");
65         }
66         puts("---");
67     }
68     return 0;
69 }

posted on 2018-02-05 14:34  大桃桃  阅读(357)  评论(0)    收藏  举报

导航