人生第一次hash
人生的第一次hash交给了模板题。
讲道理,还没有别人快排要快,就比暴力快那么一点。。。
难道我写的hash就那么菜么?
我想了想,光是处理字符串就O(n*len)。。
这是hash的正确写法吗?我都开始怀疑自己了。
不管怎样,把代码附上,以后可能会用。
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <cmath>
- using namespace std;
- int n;
- string h[], s;
- const int mod = ;
- long long hash()
- {
- int i, len = s.length() - ;
- long long ans = ;
- for(i = ; i <= len; i++) ans = ans * + s[i] - 'a';
- ans = abs(ans);
- ans %= mod;
- return ans;
- }
- bool insert()
- {
- long long i = hash();
- while(h[i] != s && h[i] != "") i++;
- if(h[i] == s) return ;
- h[i] = s;
- return ;
- }
- int main()
- {
- int i, j, ans = ;
- scanf("%d", &n);
- getline(cin, s);
- for(i = ; i <= n; i++)
- {
- getline(cin, s);
- if(insert()) ans++;
- }
- printf("%d", ans);
- return ;
- }
学习了别人的写法,200ms,感觉这才是正确姿势。
原来的我还是太naive了。
- #include <cstdio>
- #include <cstring>
- #define ULL unsigned long long
- const int MAXN = , p = ;
- int n, ans, cnt;
- int head[MAXN], next[MAXN];
- ULL val[MAXN];
- char s[MAXN];
- inline bool insert(ULL x)
- {
- int i, a = x % p;
- for(i = head[a]; i != -; i = next[i])
- if(val[i] == x)
- return ;
- val[cnt] = x;
- next[cnt] = head[a];
- head[a] = cnt++;
- return ;
- }
- inline void ha()
- {
- int i, len = strlen(s);
- ULL hash = ;
- for(i = ; i < len; i++) hash = hash * + s[i];
- ans += insert(hash);
- }
- int main()
- {
- int i;
- memset(head, -, sizeof(head));
- scanf("%d", &n);
- while(n--)
- {
- scanf("%s", s);
- ha();
- }
- printf("%d", ans);
- return ;
- }
人生第一次hash的更多相关文章
- 仅仅使用Google就完成了人生第一次破解
2021年2月6日21:17:09 begin 起因 在异乡的打工人,不善言谈,幸有一老同学,周末常邀吃饭,感恩之心铭记于心.她结婚时,为表心意欲做视频,视频需要制作字幕,搜索之,偶遇一字幕软件,但是 ...
- mac下的改装人生——第一次拆卸mbp,加入内存
这是我第一次拆我的mbp哈,心情无比激动. 在家门口电脑维修店的老板那里借来了螺丝刀.回家以后立刻开始了改装行动 我的MC700后盖是可以全部打开的,总共大概是10个螺丝的样子,上面靠右边的三颗是长螺 ...
- 人生第一次JAVA编程,电梯(并不算完成版),以及IDEA里使用git
首先先说说Intellij IDEA与git的互联,首先在任意(我是在coding)gitlab里新建一个工程. 然后新建一个工程记得注明url和地址.名称等 如果无法创建,则需要指定git地址 创建 ...
- 人生第一次成功的sql注入
看了一些学习视频,按着大神们的教程,搜索inurl:asp?id=,结果一个可以注入的站点都找不到,绝望. 不放弃,又找啊找,找啊找,终于找到了一个! 啦啦啦,注入点!ヾ(o◕∀◕)ノヾ!! 再来查数 ...
- Docker安装 人生第一次
Ubuntu 系列安装 Docker 通过系统自带包安装 Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装. $ sudo apt-get update $ sudo a ...
- 人生第一次研读MFC截图工具的笔记心得
截图工具: 其中用到了动态链接库DLL技术(Dynamic Link Library)技术,键盘钩子技术,光标捕获技术,类橡皮类CRectTracker 头文件:后缀名为.cpp,主要是定义和声明之类 ...
- Java8 Hash改进/内存改进
又开新坑o(*≧▽≦)ツ讲讲几个Java版本的特性,先开始Java8, HashMap的改进 HashMap采用哈希算法,先使用hashCode()判断哈希值是否相同,如果相同,再使用equals() ...
- hash bucket
什么是bucket bucket的英文解释: Hash table lookup operations are often O(n/m) (where n is the number of objec ...
- ConcurrentHashMap原理分析(1.7与1.8)-put和 get 需要执行两次Hash
ConcurrentHashMap 与HashMap和Hashtable 最大的不同在于:put和 get 两次Hash到达指定的HashEntry,第一次hash到达Segment,第二次到达Seg ...
随机推荐
- 2017-3-10 SQL server 数据库 T--SQL语句
创建数据库:create datebase 数据库名 注:数据库名不能为中文,不能数字开头,不能符号开头. 删除数据库:drop datebase 数据库名 创建表:create tab ...
- Isomorphic Strings leetcode
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- swift -- 集合
swift -- 集合 //注意:集合中的元素是无序的,并且不想数组,字典那样,没有索引和键. 1.创建一个空集合 var set1 : Set<Int> = Set<Int> ...
- Uri API
四中LaunchMode:http://blog.csdn.net/liuhe688/article/details/6754323 onNewIntent:http://www.cnblogs.co ...
- elastic search 学习 一
初步阅读了elastic search 的文档,并使用command实践操作. 大概明白其概念模型.
- WPF: 在 MVVM 设计中实现对 ListViewItem 双击事件的响应
ListView 控件最常用的事件是 SelectionChanged:如果采用 MVVM 模式来设计 WPF 应用,通常,我们可以使用行为(如 InvokeCommandAction)并结合命令来实 ...
- java中的对象
对象 --计算机语言中的对象 通常,我们可以从一般事物的三个方面,去认识事物: 一.是什么? 二.为什么? 三.怎么样? 接下来,我们也利用这三个方面的思维,去 ...
- 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- response.getWriter().write()与out.print()的区别(转)
1.首先介绍write()和print()方法的区别: (1).write():仅支持输出字符类型数据,字符.字符数组.字符串等 (2).print():可以将各种类型(包括Object)的数据通 ...
- java web中cookies的用法 转
一.什么是cookies? 大家都知道,浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的 连接.因此当一个请求发送到 ...