【习题 5-10 UVA-1597】Searching the Web
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
用map >mmap[100];来记录每一个数据段某个字符串出现的行数,以及用来判断这个字符串在这一段中存不存在。
**
->这里有一个地方要注意,千万不要在未确定这个字符串是否存在之前,调用mmap[i][s],因为这样,不管s存不存在,s都会加那么一个键值。
->而这就使得我们不能用更快的mmap[i].find(s)函数来寻找某个字符串在不在了.
->用mmap[i][s]访问,然后判断在不在的方式是会TLE的。
**
样例有9个'-'但实际上输出10个'-';
然后就是各个数据段之间的分隔符的输出。
or和and的输出都要用set来重新排序。
即从小的行开始到大的行依序输出。
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int n, m;
vector <string> v[N + 10];
set <int> vv;
map <string, vector<int> > mmap[N + 10];
string s, ts;
bool have(int idx, string s)
{
if (mmap[idx].find(s)==mmap[idx].end())
return false;
else
return true;
}
int main()
{
//freopen("F:\\rush.txt", "r", stdin);
ios::sync_with_stdio(0), cin.tie(0);
cin >> n; cin.get();
for (int ii = 1; ii <= n; ii++)
{
int tot = 0;
while (getline(cin, s))
{
if (s == "**********") break;
v[ii].push_back(s);
int len = s.size();
for (int i = 0; i < len; i++)
if (isalpha(s[i]))
s[i] = tolower(s[i]);
else
s[i] = ' ';
stringstream temp(s);
string x;
while (temp >> x)
{
mmap[ii][x].push_back(tot);
}
tot++;
}
}
cin >> m; cin.get();
for (int i = 0; i < m; i++)
{
getline(cin, ts);
int fi = ts.find(' ', 0);
if (fi == -1)//find x
{
bool ok = false;
for (int j = 1; j <= n; j++)
if (have(j, ts))
{
if (ok) cout << "----------" << endl;
ok = true;
vv.clear();
for (int x : mmap[j][ts]) vv.insert(x);
for (int x : vv) cout << v[j][x] << endl;
}
if (!ok) cout << "Sorry, I found nothing." << endl;
cout << "==========" << endl;
}
else
{
int fi2 = ts.find(' ', fi + 1);
if (fi2 == -1)//not x
{
bool ok = false;
ts = ts.substr(fi);
while (ts[0] == ' ') ts.erase(0, 1);
for (int j = 1; j <= n; j++)
if (!have(j, ts))
{
if (ok) cout << "----------" << endl;
ok = true;
int lenv = v[j].size();
for (int k = 0; k < lenv; k++)
cout << v[j][k] << endl;
}
if (!ok) cout << "Sorry, I found nothing." << endl;
cout << "==========" << endl;
}
else // x y z
{
stringstream ss(ts);
string x, y, z;
ss >> x; ss >> y; ss >> z;
if (y == "OR")
{
bool ok = false;
for (int j = 1; j <= n; j++)
if (have(j, x) || have(j, z))
{
if (ok) cout << "----------" << endl;
ok = true;
vv.clear();
if (have(j,x))for (int t : mmap[j][x]) vv.insert(t);
if (have(j,z))for (int t : mmap[j][z]) vv.insert(t);
for (int t : vv) cout << v[j][t] << endl;
}
if (!ok) cout << "Sorry, I found nothing." << endl;
cout << "==========" << endl;
}
else
{
bool ok = false;
for (int j = 1; j <= n; j++)
if (have(j, x) && have(j, z))
{
if (ok) cout << "----------" << endl;
ok = true;
vv.clear();
for (int t : mmap[j][x]) vv.insert(t);
for (int t : mmap[j][z]) vv.insert(t);
for (int t : vv) cout << v[j][t] << endl;
}
if (!ok) cout << "Sorry, I found nothing." << endl;
cout << "==========" << endl;
}
}
}
}
return 0;
}
【习题 5-10 UVA-1597】Searching the Web的更多相关文章
- uva 1597 Searching the Web
The word "search engine" may not be strange to you. Generally speaking, a search engine se ...
- [刷题]算法竞赛入门经典(第2版) 5-10/UVa1597 - Searching the Web
题意:不难理解,照搬题意的解法. 代码:(Accepted,0.190s) //UVa1597 - Searching the Web //#define _XIENAOBAN_ #include&l ...
- Searching the Web论文阅读
Searching the Web (Arvind Arasu etc.) 1. 概述 2000年,23%网页每天更新,.com域内网页40%每天更新.网页生存半衰期是10天.描述方法可用Pois ...
- STL --- UVA 123 Searching Quickly
UVA - 123 Searching Quickly Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.acti ...
- ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明
原文:ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 By 李远祥 ArcGIS Por ...
- 10 个基于 jQuery 的 Web 交互插件推荐
英文原文:10 jQuery for Web Interaction Plugins “用户交互”在现代的 Web 设计中占据了很大比例,这是互联网产品不可或缺的关键,对 Web 设计师也提出了更高的 ...
- 10个优秀的移动Web应用开发框架
在最近几年里,移动互联网高速发展.市场潜力巨大.继计算机.互联网之后,移动互联网正掀起第三次信息技术革命的浪潮,新技术.新应用不断涌现.今天这篇文章向大家推荐10大优秀的移动Web开发框架,帮助开发者 ...
- Searching the Web UVA - 1597
The word "search engine" may not be strange to you. Generally speaking, a search engine ...
- Nginx 1.10.2 发布,高性能 Web 服务器
Nginx 1.10.2 发布了.Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 更新内容: Changes with n ...
随机推荐
- Markdown编辑器为什么好用以及好用的markdown编辑器
Markdown编辑器为什么好用以及好用的markdown编辑器 一.总结 一句话总结:Markdown 是一种简单的.轻量级的标记语法.用户可以使用诸如 * # 等简单的标记符号以最小的输入代价生成 ...
- H265(HEVC) nal 单元头介绍及rtp发送中的fu分组发送详解
首先来介绍下h265(HEVC)nal单元头,与h264的nal层相比,h265的nal unit header有两个字节构成,如下图所示: 从图中可以看出hHEVC的nal包结构与h264有明显的不 ...
- Web跨域问题基础
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只 ...
- 搭建Spark源码研读和代码调试的开发环境
转载自https://github.com/linbojin/spark-notes/blob/master/ide-setup.md 搭建Spark源码研读和代码调试的开发环境 工欲善其事,必先利其 ...
- hostname---显示和设置系统的主机
hostname命令用于显示和设置系统的主机名称.环境变量HOSTNAME也保存了当前的主机名.在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名. ...
- tree ---树状显示
tree命令以树状图列出目录的内容. 语法 tree(选项)(参数) 选项 -a:显示所有文件和目录: -A:使用ASNI绘图字符显示树状图而非以ASCII字符组合: -C:在文件和目录清单加上色彩, ...
- mysql判断一个字符串是否包含某子串 【转】
文章出处:mysql判断一个字符串是否包含某子串 使用locate(substr,str)函数,如果包含,返回>0的数,否则返回0 例子:判断site表中的url是否包含'http://'子串, ...
- SDUTOJ 2711 4-2 电子时钟中的运算符重载
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUl9NaXNheWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- thinkphp杂项功能(主干)
thinkphp杂项功能(主干) 一.总结 1.杂项功能:杂项里面我需要有点印象的是五个:缓存,多语言,图像处理,文件处理,单元测试 二.thinkphp杂项功能(主干) thinkphp扩展杂项功能 ...
- HttpUtility.UrlEncode,Server.UrlEncode 的区别
引用: 1.HttpUtility.UrlEncode,HttpUtility.UrlDecode是静态方法,而Server.UrlEncode,Server.UrlDecode是实例方法. 2.Se ...