hdu1251 题目

这道题,主要是在主函数的输入输出上犹豫了。

#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
#include<algorithm>
const int Max = 1e6+5;
struct Trie{
Trie * next[26];
int cnt;
};
int malloc_p=0;
Trie memory[Max];
Trie *creat()
{
Trie * t = &memory[malloc_p++];
t->cnt=1;
for(int i=0;i<26;i++)
t->next[i]=NULL;
return t;
}
void _insert(Trie *root,char* str)
{
Trie* p=root;
for(int i=0;str[i]!='\0';i++)
{
int k=str[i]-'a';
if(p->next[k]) p->next[k]->cnt++;
else p->next[k]=creat();
p=p->next[k];
}
}
int _search(Trie *root ,char* str)
{
Trie *p = root;
for(int i=0;str[i]!=0;i++)
{
int k = str[i]-'a';
if(p->next[k]) p=p->next[k];
else return 0;
}
return p->cnt;
}
int main()
{
char str[15];
Trie *root = creat(); while(gets(str)&&strlen(str)!=0){
_insert(root,str);} while(cin>>str){
int ans=_search(root,str);
printf("%d\n",ans);
}
return 0;
}

hdu1247 题目

题目大意:

就是找出一个单词,前半部是一个出现过的单词,后半部也是,记住,要严格满足这个条件

所以,其实也就是先查找一个单词的是否有前缀,再用这个单词除去前缀的部分查找是否存在一个这样的单词

虽然题目说按字典序输出,但本身已经是按字典序输入了,所以排序也就省了

#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
#include<algorithm> struct Trie{
Trie * next[26];
int cnt;
}; Trie *root;
int malloc_p=0;
char str[50004][14]; void _insert(char* s)
{
Trie* p=root;
for(int i=0;s[i]!='\0';i++)
{
int k=s[i]-'a';
if(p->next[k]==NULL)
p->next[k]=new Trie();
p=p->next[k];
}
p->cnt=1;
}
int _search2(char* s)
{
Trie *p = root;
for(int i=0;s[i]!='\0';i++)
{
int k = s[i]-'a';
if(p->next[k])
{
p=p->next[k];
if(p->cnt==1&&s[i+1]=='\0')//
return 1;
}
else return 0;
}
return 0;
}
int _search(char* s)
{
Trie *p = root;
for(;*s!='\0';)
{
int k = *s-'a';
if(p->next[k])
{
p=p->next[k];
if(p->cnt==1&& _search2(s+1) )//
return 1;
s++;
}
else return 0;
}
return 0;
}
int main()
{
int i=0;
root = new Trie();
while(cin>>str[i]){
_insert(str[i]);
i++;
}
for(int j=0;j<i;j++){
if(_search(str[j]))
cout<<str[j]<<endl;
} return 0;
}

博客上很多人说这道题挺简单的,但是我还是做了好长时间,可能是因为才开始接触字典树,还不太熟悉吧,

下面是转载的别人的代码:map+string

感觉挺简单的,但是现在还没有学map ,以后应该看得懂吧

  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4. using namespace std;
  5. map <string, int> m_v;
  6. string str[50006];
  7. int main() {
  8. int k(-1);
  9. while(cin >> str[++k]) {
  10. m_v[str[k]] = 1;
  11. }
  12. for(int i = 0; i <= k; i++) {
  13. int e = str[i].size()-1;
  14. for(int j = 1; j < e; j++) {
  15. string s1(str[i], 0, j);
  16. string s2(str[i], j);
  17. if(m_v[s1] == 1 && m_v[s2] == 1) {
  18. cout << str[i] << endl;
  19. break;
  20. }
  21. }
  22. }
  23. return 0;
  24. }

hdu1251 && hud 1247 (字典树)的更多相关文章

  1. Hat’s Words HDU - 1247 字典树

    题意:给出数个单词 输出单词 如果该单词 是由字典中的单词组成的 思路:字典树 先把全部建树  然后对于每一个单词进行分割,分别拿两半到字典树里面去找 小心RE! #include<bits/s ...

  2. hdu 1247 (字典树入门)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. HDU-1251 统计难题,字典树或者map!

    统计难题 很久就看过这个题了,但不会~~~不会~~ 题意:给出一张单词表,然后下面有若干查询,每次给出一个单词,问单词表中是否存在以这个单词为前缀的单词,输出数量.本身也是自身的前缀.只有一组数据! ...

  4. hdu1251 hash或者字典树

    题意: 统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量 ...

  5. hdu1251 统计难题 字典树

    Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...

  6. 字典树模板题(统计难题 HDU - 1251)

    https://vjudge.net/problem/HDU-1251 标准的字典树模板题: 也注意一下输入方法: #include<iostream> #include<cstdi ...

  7. hdu1251(字典树)

    统计难题(hdu1251) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Tota ...

  8. hdoj 1247 Hat’s Words(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1247 思路分析:题目要求找出在输入字符串中的满足要求(该字符串由输入的字符串中的两个字符串拼接而成)的 ...

  9. hdu1251+字典树常用模板

    这里只简单给出几个常用的字典树的模板,要看具体介绍的请看:传送门 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现) ...

随机推荐

  1. scala-学习 2

    列表操作 List() 或者是 Nil 空list scala> val a = List() a:List[Nothing] = List() print(a.length) a.length ...

  2. 本地管理表空间(LMT)与自动段空间管理(ASSM)概念

    创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM). extent ...

  3. Retrofit2.0+RxJava2.0问题

    问题1:java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path ...

  4. ubuntu下安装.deb包的安装方法

    ubuntu16.04的软件中心应该是有bug,安装不了第三方.deb文件,我们只有使用dpkg -i 或者gdebi的方式安装,我使用的是后者,因为后者功能更加强大.要使用gdebi命令先要安装它: ...

  5. Thread(线程)和ThreadPool(线程池) Thread回调与返回值

    Thread(线程) Thread开启线程:接收一个参数 TestClass tc = new TestClass(); //没有返回值,有一个object类型的参数的委托:两种写法. Paramet ...

  6. 清除所有Cookie

    代码 /// <summary> /// 清除所有Cookie /// </summary> public static void RemoveAll() { System.W ...

  7. mysql索引提高查询速度

    使用索引提高查询速度 1.前言 在web开发中,业务模版,业务逻辑(包括缓存.连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈.本文主要针对My ...

  8. db2 统计信息 runstats

    1.runstats的语法:runstats on table [模式名].[表名] with distribution and detailed indexes all注意:你可以在所有列上,或者仅 ...

  9. Java8 改进的匿名内部类:

    1.匿名内部类适合创建那种只需要一次使用的类 2.匿名内部类定义格式: new 实现接口() | 父类构造器(实参列表){ //匿名内部类类体部分 } 3.从上面定义格式可以看出,匿名内部类必须实现一 ...

  10. [SoapUI] Tips and Tricks(提示和技巧)

    https://www.soapui.org/scripting-properties/tips-tricks.html