zoj_3674_Search in the Wiki(map)

Search in the Wiki


Time Limit: 2 Seconds     
Memory Limit: 65536 KB



As we known, Searching in Wiki is an useful way for everyone who wants to get information. Wiki, a website which allows its users to add, modify, or delete its content via a web browser, is famous for its huge information. You can find almost anything you
heard in Wiki.

But sometimes you may get into trouble because of these huge information. It‘s hard to find key words from so many characters, that means you will spend a lot of time understanding what it describes. To solve this question, wiki provides some tips for each
word. The tips for one word describe the meaning of this word briefly, so you can understand this word quickly through these tips. A tip consists only of ‘a‘ to ‘z‘ and ‘A‘ to ‘Z‘. It‘s a convenient application.

This time you get a task from your teacher to search information for given words. It‘s a boring work, so you think of Wiki immediately. You get tips for each word from Wiki, and now you can answer questions the teacher may ask tomorrow morning easily. But
to make sure, you decide to test yourself before tomorrow.

You prepare some queries for the test, each query contains some words given before and you should find out all the common tips of words in this query (A common tip means all the words in the query have this tip). In order to check your answer, you need to
write a program now.

Input

There are multiple test cases.

Each case begins with an integer n ( 1 <=n <=100 ), indicating the number of words given. Next N*2 lines, each two lines describe a word and its tips. For each two lines, the first line gives an word ( the word is no longer than 30
characters) , and the second line contains some tips for this word (the string is no longer than 200 characters), each two words are separated by one space.

The N*2+2 line contains an integer m ( 1 <=m <= 100 ), indicating the number of queries. Next m lines, each line contains some words, each two words are separated by one space.( the string is no longer than 200 characters)

Process to the end of input.

Output

For each query, print one line with all the common tips of the words in query, and each two words are separated by one space. (The common tips should be printed in alphabet order) If no tips satisfy the previous request, print one line with "NO".

Sample Input

4
fish
agile animal
horse
swift animal
eagle
fierce animal
Kyuubee
alien incubator
2
fish horse eagle
fish horse eagle Kyuubee

Sample Output

animal
NO


题意:首先给你一个n,接下来输入2*n行,每两行一组,第一行一个单词,第二行的所有单词是第一行的tips;然后给出m个查询,每次查询给出单词的共同tips。如果没有输出NO。

分析:直接map乱搞搞就行了。

题目链接:

#include<set>
#include<map>
#include<ctime>
#include<cmath>
#include<queue>
#include<stack>
#include<cctype>
#include<string>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;

typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;

const int maxn = 100 + 5;
const int maxm = 100 + 5;

int n,m;
string sr,ss;
char st[2*maxn];
string rstr[2*maxn*maxn];
int id1,id2,d1,d2;
map<string,int>idx1;
map<string,int>idx2;
vector<int>graph[maxn];
int vis[2*maxn*maxn];
string ans[2*maxn*maxn];

void init(){
    id1=id2=0;
    idx1.clear();
    idx2.clear();
    for(int i=0;i<maxn;i++) graph[i].clear();
}

int get_idx1(string name){
    if(idx1.count(name)) return idx1[name];
    idx1[name]=++id1; return id1;
}

int get_idx2(string name){
    if(idx2.count(name)) return idx2[name];
    idx2[name]=++id2; rstr[id2]=name; return id2;
}

void input(){
    for(int i=1;i<=n;i++){
        cin>>sr;
        getchar();
        gets(st);
        d1=get_idx1(sr);
        int len=strlen(st);
        ss.clear();
        st[len]=' ';
        for(int j=0;j<=len;j++){
            if(st[j]==' '){
                d2=get_idx2(ss);
                graph[d1].push_back(d2);
                ss.clear();
            }
            else ss+=st[j];
        }
    }
}

void solve(){
    scanf("%d",&m);getchar();
    for(int i=1;i<=m;i++){
        gets(st);
        int len=strlen(st);
        st[len]=' ';
        int cnt=0;
        ss.clear();
        memset(vis,0,sizeof(vis));
        for(int j=0;j<=len;j++){
            if(st[j]==' '){
                d1=get_idx1(ss);
                for(int k=0;k<graph[d1].size();k++){
                    d2=graph[d1][k];
                    vis[d2]++;
                }
                ss.clear();
                cnt++;
            }
            else ss+=st[j];
        }
        int tot=0;
        for(int j=1;j<=id2;j++){
            if(vis[j]==cnt){
                ans[tot].clear();
                ans[tot++]=rstr[j];
            }
        }
        if(tot==0) printf("NO\n");
        else{
            sort(ans,ans+tot);
            for(int j=0;j<tot;j++){
                if(j==tot-1) cout<<ans[j]<<endl;
                else cout<<ans[j]<<" ";
            }
        }
    }
}

int main(){
    while(scanf("%d",&n)!=EOF){
        init();
        input();
        solve();
    }return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-15 22:37:03

zoj_3674_Search in the Wiki(map)的相关文章

机器学习建议(转)

机器学习说简单就简单,说难就难,但如果一个人不够聪明的话,他大概很难知道机器学习哪里难.基本上要学习机器学习,先修课程是algebra, calculus, probability theory, linear regression.这几门科学好了再学Machine learning是事半功倍的.此外近代数学的东西也要懂, functional analysis啥的.其实不懂也行,只是现在文献总是喜欢引用里面的概念,懂一些读起来方便.(我就很讨厌manifold learning这个名字,把许多

针对不同手机系统的LBS地图定位解决方案

原文:针对不同手机系统的LBS地图定位解决方案 摘要: 针对目前的三种手机系统:Android安卓.S60塞班.IOS苹果,做出的三种不同的手机地图应用解决方案. 查阅了多数地图API对手机的支持情况,发现并没有一家能完全覆盖到这三个平台. 目前,百度地图API的移动版,即SDK版本,只支持安卓系统一种.那么,如果我要开发苹果系统上的收费应用,或者塞班上的手机应用时,应该如何用地图API来实现呢? 我分别总结了三种情况的解决方案. --------------------------------

IAR生成文件链接过程解析

IAR生成文件设置 最近在搞contiki在IAR上的移植工作,好不容易移植完成了,但是生成的bin文件超出了MCU的Flash大小,MCUFlash为512K,生成的bin文件747K,开始一直认为是系统文件太多导致,后来觉得疑点颇多,所以就研究了一下IAR工程的编译和链接过程,具体过程如下: 1. 使用IAR compiler + assembler,对工程的每个".c/.cpp/.asm",分别生成一个.o文件,为可重定位ELF,叫做symobol.(内含的目标代码实际为机器码)

【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!

原文:[百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 摘要: 百度地图静态图API!您无须执行任何“特殊”操作便可在网页上显示此图片. 不需要 JavaScript.我们只需创建一个网址,并将其放入 <img> 标记中.即可将定制的百度地图图片嵌入到自己的网页中. ------------------------------------------------------------------------------------------------------

【百度地图API】关于如何进行城市切换的三种方式

原文:[百度地图API]关于如何进行城市切换的三种方式 摘要:本文介绍了三种切换城市的方式:查询城市.城市列表和显示城市轮廓. --------------------------------------------------------------------- 很多API爱好者问到我,如何像百度地图那样,实现各个城市之间的切换呢? 在这里,公布以下三种方式. 第一种,是查询城市的方法.使用API接口的LocalSearch方法.我之前写过完整的文章,请查看: http://www.cnbl

【百度地图API】批量地址解析与批量反地址解析(带商圈数据)

原文:[百度地图API]批量地址解析与批量反地址解析(带商圈数据) 摘要:因为地址解析的webserives方式还没有开通,所以先用JS版本的地址解析接口来批量获取地址解析数据吧,同时还能得到商圈的数据呀~~ ---------------------------------------------------------------------------------------------------------------------------------- API和SDK都可以不展示地

【百度地图API】如何利用地图API制作汽车沿道路行驶的动画?——如何获得道路层数据

原文:[百度地图API]如何利用地图API制作汽车沿道路行驶的动画?--如何获得道路层数据 有几个做汽车导航的朋友问我说,他们想在地图上制作一辆车沿着道路行驶的动画.可是,百度地图的道路数据并没有公开.所以,应该怎么办呢? 一. 我们先来学习如何把百度地图“弄”出来.把下面这段代码保存为htm格式,用浏览器打开,就能看到百度地图了. <html><head><meta http-equiv="Content-Type" content="text

Map Wiki -- proposed by Shuo Ren

Map Wiki —— 基于Bing地图的生活百科 在旅游.逛街或是闲逛的时,很多时候,我们往往想要对于身边的美食.医院.旅馆.购物.学习.景点等信息有进一步认识.在这时,我们大多会再打开百度或者大众点评等APP再次搜索.有没有一种办法,可以将地图和这些信息结合起来呢? 设想存在这样的一款产品,其界面是基于Bing地图,同时提供了类似于维基百科的基于用户的词条创建.修改.分享.维护功能.只不过在作品中,词条(美食.医院.旅馆.购物.学习.景点等地区的详细描述)变为地图上的图钉.每当用户到达某一区

ZOJ 3674 Search in the Wiki(字典树 + map + vector)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4917 题意:每个单词都一些tips单词.先输入n个单词和他们的tips.然后m组查询,每次查询一些单词,按字典序输出这些单词的公有tips.(每个单词都都只包含小写大写字母) 思路:对第i个单词,用vector数组g,g[i]来存这个单词的所有tips.对于所有单词建立字典树,在单词的结尾结点存好该单词的tips在g数组中存的一维下标i.最后用map来计数每组询问中