【HDU - 1247】Hat’s Words(字典树,预处理,tricks)

题干:

A hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary. 
You are to find all the hat’s words in a dictionary. 

Input

Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 50,000 words. 
Only one case. 

Output

Your output should contain all the hat’s words, one per line, in alphabetical order.

Sample Input

a
ahat
hat
hatword
hziee
word

Sample Output

ahat
hatword

题目大意:

给你n个按字典序排列的单词,问你其中的所有能由另外两个单词组成的单词并按字典序输出(字符串按照字典序读入的)

解题报告:

  因为题目说读入的字符串最多一行(80个字符?反正我设了55个字符过了),所以直接暴力就行了,假设单个字符串平均长度为len,那复杂度是O(50000/len * (len*len)) 也就是O(50000*len),所以题目如果只说了一共50000个字符,没说每个字符串的长度,那就需要对每个字符处理的时候先预处理出一个东西。

对每个串正着扫一遍 pre[i]存[0,i]有没有出现过,再对每个串反着在第二棵树里扫一遍 suf[i]存[i,len-1]有没有出现过,如果pre[i]&suf[i+1] 那这个串就符合条件

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 50000 + 5;
char s[MAX];
int trie[MAX][55];
int cnt[MAX];
char ss[MAX][55];//????
int tot,n;
void insert(char str[]) {int rt = 0;int len = strlen(str);for(int i = 0; i<len; i++) {int cur = str[i] - 'a';if(!trie[rt][cur]) trie[rt][cur] = ++tot;rt = trie[rt][cur];}cnt[rt]++;
}
int ask(char str[]) {int rt = 0;int len = strlen(str);for(int i = 0; i<len; i++) {int cur = str[i] - 'a';if(!trie[rt][cur]) return -1;rt = trie[rt][cur];}return cnt[rt];
}
int main()
{while(~scanf("%s",s)) {strcpy(ss[++n],s);insert(s);}for(int i = 1; i<=n; i++) {int len = strlen(ss[i]);int flag = 0;for(int j = 0; j<len-1; j++) {char tmp[55];memset(tmp,0,sizeof tmp);for(int k = 0; k<=j; k++) tmp[k] = ss[i][k];//赋值过来 if(ask(tmp) == 1) {memset(tmp,0,sizeof tmp);for(int k = j+1; k<len; k++) tmp[k-(j+1)] = ss[i][k];if(ask(tmp) == 1) {flag = 1;break;}}}if(flag) printf("%s\n",ss[i]);}return 0 ;
}

对于字符串处理那一部分,可以用strncpy函数。

功能:将字符串from 中至多count个字符复制到字符串to中。如果字符串from 的长度小于count,其余部分用'\0'填补。返回处理完成的字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql操作json优点和缺点_MySQL与JSON-为什么?

我正在设计一个小的网络应用程序/游戏。 哪个更好&#xff1a;MySQL表或json文件&#xff1f; 它们都存储信息。 它们都可以由PHP解析。 优点/缺点是什么&#xff1f;这就是我的意思&#xff1a;username | password-------------------seefour | abc123与{"username"…

【csust】最小素因子问题(树状数组)

题干&#xff1a; http://csustacm.com:4803/problem/1083 Description 寒冰射手艾希新学会了一个技能&#xff0c;艾希通过这个技能成为了一名声名远扬的神箭手&#xff0c;从此再也无人敢侵犯弗雷尔卓德&#xff01; 这个技能的描述如下&#xff08;假设英雄联盟内的每个…

操作表格_Excel表格基础操作-新手入门级

今日新学了几个基础操作&#xff0c;觉得很有意思&#xff0c;分享给大家。不过真心觉得&#xff0c;有些操作当时学会了&#xff0c;长时间不用&#xff0c;转眼就忘了&#xff1b;另一方面&#xff0c;如果购买相关课程&#xff0c;学着也没什么意思&#xff0c;我前段时间买…

【csust】寻宝(贪心,思维)

题干&#xff1a; Description 在一维坐标轴上有许多宝藏&#xff0c;总共n种宝藏&#xff0c;每种宝藏有k个。现在共k个人寻宝&#xff0c;k个人初始位置可以位于任意点。但是每人需要按指定顺序捡起宝藏&#xff08;1->2->3->...->n&#xff0c;先捡第1种&…

dmsetup remove_all 这命令干啥的_分一个小知识,服务器上的一个解压与压缩文件的命令....

在服务器上对文件做解压操作,是一件非常常见的操作,如安装软件就有很多是要用的到这个操作的.去官网下载一个压缩包,然后解压,编译,再安装.当然网上是能找到相应的命令操作.但是每次都要去找命令,就算记住了,不知道为什么要这样去使用,那么如果不经常使用那还是会忘记的.所以要…

【POJ - 1947】Rebuilding Roads (树形dp,背包问题,树形背包dp)

题干&#xff1a; The cows have reconstructed Farmer Johns farm, with its N barns (1 < N < 150, number 1..N) after the terrible earthquake last May. The cows didnt have time to rebuild any extra roads, so now there is exactly one way to get from any …

seo vue 动态路由_基于vue.jsvue-router的动态更新TDK(SEO优化)

本文基于工作项目开发&#xff0c;做的整理笔记前几天帮朋友解决这个问题&#xff0c;顺带学习了一下&#xff0c;做个笔记Mark下。前提条件&#xff1a;你已经了解并使用vue&#xff0c;能够搭建应用站点。编码环境&#xff1a;system&#xff1a;OS X EI Capitan 10.13.3npm&…

*多叉树的树形背包常见建模方法

一.多叉树变二叉树。 这个技巧其实也有两种具体的方法&#xff1a;树的孩子兄弟表示法与dfs序法。 1.树的孩子兄弟表示法。 大家在学习树形结构时一定接触了一个多叉树变二叉树的方法&#xff0c;就是把每个点与它的第一个儿子连边&#xff0c;然后将它的儿子依次连接起来。可…

python把英语句子成分字母_求一个可以分析英语句子成分的软件或网站

目前还没有&#xff0c;最好的翻译软件都不能翻译英语语法&#xff0c;只能翻译语法结构简单的句子&#xff0c;更别提专业分析句子成分的软件了&#xff1b;出现专业分析英语句子成分的软件&#xff0c;英语老师应该就失业了。求一个可以分析英语句子成分的软件或网站句子是按…

【51nod - 1076】2条不相交的路径(Tarjan无向图判环)

题干&#xff1a; 给出一个无向图G的顶点V和边E。进行Q次查询&#xff0c;查询从G的某个顶点V[s]到另一个顶点V[t]&#xff0c;是否存在2条不相交的路径。&#xff08;两条路径不经过相同的边&#xff09; &#xff08;注&#xff0c;无向图中不存在重边&#xff0c;也就是说…

python 导入csv文件到oracle_python将文件夹下的所有csv文件存入mysql和oracle数据库

#oracle版首先新建python脚本(d:/python/orclImport.py)import os #引入os包if __name__ __main__:#遍历文件夹下所有的dmp文件&#xff0c;其中filename为所有文件、文件夹的名称。#因为我文件夹下确定都是dmp文件&#xff0c;所以无需进行特殊判断for filename in os.listdi…

createform用法_vue自定义表单生成器form-create使用详解

介绍form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成器。并且支持生成任何 Vue 组件。结合内置17种常用表单组件和自定义组件&#xff0c;再复杂的表单都可以轻松搞定。文档 | github演示项目: 开源的高品质微信商城功能自定义组件可生…

【蓝桥杯官网试题 - 历届试题】发现环(dfs+并查集,或无向图tarjan判环,无向环,或拓扑排序)

题干&#xff1a; 问题描述 小明的实验室有N台电脑&#xff0c;编号1~N。原本这N台电脑之间有N-1条数据链接相连&#xff0c;恰好构成一个树形网络。在树形网络上&#xff0c;任意两台电脑之间有唯一的路径相连。   不过在最近一次维护网络时&#xff0c;管理员误操作使得某…

倍福 在 vs 里 编程 是怎么做到的_截图里的文字要改,字体怎么做到一模一样?...

大家是不是碰到过这么一个尴尬的情况&#xff1a;一个截图里有一个错别字&#xff0c;或者其中一小段文字要修改&#xff0c;可是苦于找不到源文件&#xff0c;又没办法找出和原来文字一模一样的字体。每次遇到这样的情况你都是怎么处理的呢&#xff1f;火箭君今天给大家介绍一…

【ZOJ - 3591】Nim(博弈问题,思维,STLmap)

题干&#xff1a; Nim is a mathematical game of strategy in which two players take turns removing objects from distinct heaps. The game ends when one of the players is unable to remove object in his/her turn. This player will then lose. On each turn, a pla…

【牛客 - 369B】小A与任务(贪心,优先队列)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/369/B 来源&#xff1a;牛客网 小A手头有 n 份任务&#xff0c;他可以以任意顺序完成这些任务&#xff0c;只有完成当前的任务后&#xff0c;他才能做下一个任务 第 i 个任务需要花费 xixi 的时间…

word硬回车是怎么产生的_在word中怎样删除软硬回车?

1.点击“开始”&#xff0d;“程序”&#xff0d;“附件”&#xff0d;“记事本”&#xff0c;打开“记事本”&#xff0c;放在一边。2.打开需要调整的Word文档&#xff0c;在文章的任意处单击一下鼠标左键。然后按住键盘的“Ctrl”键不要松&#xff0c;再按一下“A”键&#x…

*【POJ - 3659】Cell Phone Network (树形dp,最小支配集)

题干&#xff1a; Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (conveniently numbered 1..N) so the…

测试jdbc连mysql数据库_java连接mysql数据库及测试是否连接成功的方法

本文实例讲述了java连接mysql数据库及测试是否连接成功的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;package com.test.tool;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import…

mysql配置日志老化配置_mysql配置-日志大小限制和自动删除

线上的项目磁盘消耗问题, 发现和MySQL日志有关系.需要处理的问题如何限制大小 不让日志无限膨胀?配置日志不留?删除的方式和直接删除会对服务有什么影响?解决方式限制大小, 保留最近一段时间日志.set global expire_logs_days7; # 命令行进入MySQL中, 临时设置保留最近7天日…