MiYu原创, 转帖请注明 : 转载自 ______________白白の屋  

这几天一直很YM..... 纠结.....  做个水题 1075......WA N次.....YM.
(  很简单的一题,  检索输入的串是否存在, 存在就替换输出, 不存在直接输出就可以了 )
最后无奈, 纯C++ STL..过了, 时间竟然用了 1600+MS 还是 C++交的,  G++要3400+MS,  不
明白为什么时间差那么多,  用trie 做了次, 250MS...   改了好几次效率都上不来   ....  YM 中 把trie 写成了 伪 map ,只有一点简单的功能,
其他的不想写了.  写得好复杂.................... 
伪 map 代码如下 :  好长.....................
/*
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋
http://www.cnblog.com/MiYu
Author By : MiYu
Test      : 4
Program   : 1075
*/
#include <iostream>
#include <string>
using namespace std;
typedef struct dict DIC;
DIC *root = NULL;
string ext = "";
struct dict {
dict (){ str = "";memset ( child , 0 , sizeof ( child ) ); }
~dict () { }
void del ( DIC * node );
string & insert ( char *ins,char *key = NULL );
string & find ( char *ins );
string & operator [] ( char *a );
string & operator = ( char *a );
DIC *child[26];
string str; 
};
void dict::del ( DIC * node )
{
if ( node == NULL ) return;
for ( int i = 0; i != 26; ++ i )
{
if ( node->child[i] != NULL )  del ( node->child[i] );
}
node->str = "";
free ( node );  
}
string & dict::operator [] ( char *a )
{
string &str = find ( a );
if ( str == "" )
return  insert ( a );  
return str;
}
string & dict::operator = ( char *a )
{
return this->str = a; 
}
string & dict::insert ( char *ins,char *key )
{
DIC *cur = this,*now;
int len = strlen ( ins );
for ( int i = 0; i != len; ++ i )
{
if ( cur->child[ ins[i] - 'a' ] != NULL ) 
{
cur = cur->child[ ins[i] - 'a' ];
}
else
{
now = new DIC;
cur->child[ ins[i] - 'a' ] = now;
cur = now;
}
return cur->str;
}
string & dict::find ( char *ins )
{
DIC *cur = this;
int len = strlen ( ins );
for ( int i = 0; i != len; ++ i )
{
if ( cur->child[ ins[i] - 'a' ] != NULL )
cur = cur->child[ ins[i] - 'a' ];  
else
return ext; 
return cur->str;
}
char words[3010],temp[12],t[12];
int main ()
{
DIC dict;
root = &dict;
scanf ( "%s", t );
while ( scanf ( "%s", t ), strcmp ( t, "END" ) != 0 )
{
scanf ( "%s", temp );
dict[temp] = t;
}
scanf ( "%s", t );
getchar();
while ( gets ( words ) && strcmp ( words, "END" ) != 0 )
{
memset ( temp, 0, sizeof ( temp ) );
int len = strlen ( words );
for ( int i = 0,j = 0; i != len; ++ i )
{
if ( isalpha ( words[i] ) )
{
temp[j++] = words[i];
else 
{
temp[j] = '\0';
string str = dict[ temp ];
if ( str == "" )
printf ( "%s",temp ); 
else
printf ( "%s",str.c_str() );
putchar ( words[i] );
j = 0; 
}
}
putchar ( 10 );
}
return 0;
}

STL 代码如下 :  好短....

/*

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

http://www.cnblog.com/MiYu

Author By : MiYu

Test      : 1

Program   : 1075

*/

#include <iostream>

#include <string>

#include <map>

using namespace std;

string words,temp;

map < string , string > mp;

int main ()

{

cin >> words;

while ( cin >> words, words != "END" )

{

cin >> temp;

mp[ temp ] = words;

}

cin >> words;

getchar();

while ( getline ( cin, words ) && words != "END" )

{

string out = "";

int len = words.size();

for ( int i = 0; i != len; ++ i )

{

if ( isalpha ( words[i] ) )

{

out += words[i];

}

else

{

if ( mp[out] == "" )

cout << out;

else

cout << mp[out];

cout << words[i];

out = "";

}

}

cout << endl;

}

return 0;

}

转载于:https://www.cnblogs.com/MiYu/archive/2010/08/25/1807990.html

极度 YM....自己用trie写了个伪 map....( HDU 1075 )相关推荐

  1. 智能仿写软件-智能伪原创改写软件

    智能仿写工具:营销创意的必备利器 在当今快节奏和不断发展的商业环境中,企业营销人员需要在短时间内产生大量有创意和高质量的内容.因此,智能仿写工具作为营销策略的一种创新方法而出现,可以帮助企业的写作团队 ...

  2. java 自定义map_自定义写实现java中map中的功能(简易)

    package test; /** * 通过自定义来实现一个map功能 * 存放键值对,根据键对象找到一个值对象,确保没有重复 */ import java.util.Map; public clas ...

  3. java面试题:编写java程序,随机生成n个m以内的加减法算式,形如a±b=c,其中n,m∈N+,a,b,c∈[0,m].请结合自身请款勾选作答的题目,然后在下面写出代(伪)码.

    public class AddTest { public static void main(String[] args) { /** * 生成次数为正整数,根据生成次数,随机生成随机册数次的加减运算 ...

  4. Trie(前缀树/字典树)及其应用

    from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...

  5. Trie树(字典树)详细知识点及其应用

    Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...

  6. 短视频文案怎么写?优质短视频文案写作技巧

    抖音短视频的质量仔细推敲起来确实会涉及到非常多的因素,但真正决定你视频曝光的关键就是视频文案,从剧情的铺垫.冲突.反转,这在一定程度上能够吸引不少的观众. 又或者小说开篇要么叙述宏达的故事背景,要么制 ...

  7. vue表情包渲染,trie算法实现,表情包资源分享

    表情包图片资源 https://yuan-1252477692.cos.ap-guangzhou.myqcloud.com/blog/files/emoticon.zip data.json {&qu ...

  8. 对人生几个重要的东西的感悟,写的很好

    今天是 22 岁的最后一天.几个月前,我从沃顿商学院毕业,用文凭上"最高荣誉毕业"的标签安抚了已经年过半百的老妈,然后转头辞去了毕业后的第一份工作,跟一家很受尊敬的公司.还有 15 ...

  9. 手写一个简单的HashMap,搞定挑剔面试官

    作者:编程十二 链接:https://www.jianshu.com/p/1be0e957baf2 前言 今天去面试啊,聊得差不多的时候面试官突然问我会手写HashMap吗?这我哪能怂啊,好死不死的面 ...

最新文章

  1. barmanager 不显示_广州13.3寸广告液晶显示屏品牌排行榜
  2. very_confusing
  3. Android插件化原理解析——广播的管理
  4. python的shell无法输入_python中shell如何逐行输入?
  5. C#期末考试题,图书系统
  6. MVC + LigerUI 做后台管理还真是清爽
  7. linux的mysql小记
  8. linux通讯录软件带头像,小程序新技能 Get!保存微信好友头像到手机通讯录
  9. 程序设计实验与上机考试教程 全国计算机等级考试二级vb模拟试题,程序设计基础实验与上机考试教程...
  10. java正则表达式控制半角字符串输入
  11. android appwidget桌面插件,Android:AppWidget、桌面小部件
  12. Linux dd烧写系统
  13. 吊打何同学?猛肝24小时,用6000元成本打造 AirDesk!
  14. GCC编译器高效利用cache的原理和参数
  15. 会编程的少年有多厉害?8岁女儿写代码哄程序员爸爸开心,网友直呼:破防了
  16. Java设置小数点位数小妙招
  17. oracle驱动下载地址
  18. Docker容器离线安装字体(宋体)
  19. 陶哲轩career advice 翻译
  20. Visio 使用常用快捷键总结

热门文章

  1. ios uiwindow弹窗_iOS 你需要的弹窗大全
  2. arcgis python实例_arcgis python脚本工具实例教程—栅格范围提取至多边形要素类
  3. php 清除英文字母,计算器清除键的字母是什么
  4. 表示我想你的代码java_如何编写可怕的Java代码?
  5. 用STM32做个东京奥运奖牌榜
  6. 英雄会被表彰,这些技术与代码也将被历史铭记
  7. Verilog hdl与VHDL混用详解
  8. ef 数据迁移mysql_Windows下重装xampp并做MySQL数据迁移的步骤
  9. java和redis统计在线,在SpringBoot中使用Redis的zset统计在线用户信息
  10. python网络编程要学吗_总算发现如何学习python网络编程