UVA1597 在Web中搜索 Searching the Web

该博客讲述了如何解决UVA1597问题,强调无需复杂算法,主要利用STL来处理。博主通过两个映射数据结构管理文章单词,分别用于文章单词去重和记录每行单词。在处理四种操作时,对文章逐行检查是否满足条件。文章指出一个小细节,即连续文章间需要10个连字符分隔,避免了因忽视输入格式而遇到的问题。博主尝试将字符串转换为整数ID以提高效率,但发现并未改变运行时间,可能由于单词数量过多所致。
摘要由CSDN通过智能技术生成

这道题因为出现在第五章,所以是不需要什么算法的,就是使用stl乱搞就行了,虽然stl的效率很低,但是还是能过的,我的思路就是两个映射,一个是映射一篇文章里面的所有的单词,为了去重,所以用set,第二个是每篇文章的每一行都映射一下这一行里面的单词,接下来进行四个操作的时候,外层遍历文章,先用第一个映射看看这个文章里是不是符合要求,如果符合要求,那么内层遍历这个文章的所有行,这时用第二个映射,判断当前行是不是符合要求,来决定输出,最后程序的一个实现小细节是,对于每个操作,两篇文章之间要有10个同样的-号,第一篇文章之前,最后一篇文章之后不需要输出,这个坑的地方就是我看pdf明明是9个,但是看了看原文,结果写的是10个,以后还是要把英文的输入输出格式给看看,不能一点不看,

最后,因为寻思里面都是字符串的比较,所以是不是给每个字符串分配一个整数id,然后对整数进行操作是不是更快一点,就像这一章前面的例题讲的很重要的方法那样,然后就改了,中间还出现了一会儿编译错误,是有的地方的string传函数的时候不能传引用,也不知道为啥会这个样子,最后提交发现时间也没变快,还是原来的那样,可能是单词数目太多的缘故把

#include <bits/stdc++.h>

#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) (x).size())
#define all(x) (x).begin(), (x).end()

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;

string s[105][1500];
map<pa, unordered_set<int> > mp;
map<int, unordered_set<int> > mp2;
map<string, int> mp3;
vector<string> v;

int getid(string s) {
   
    if (mp3.find(s) != mp3.end()) return mp3[s];
    v.pb(s);
    return mp3[s] = sz(v) - 1;
} //写这个东西并没有变快

int main() {
   
    int n;
    cin >> n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值