hdu 4886 TIANKENG’s restaurant(Ⅱ) (hash)
来源:互联网 发布:tf idf算法 python 编辑:程序博客网 时间:2024/05/29 11:11
题目大意:
求出在文本串中第一个没出现的字典序最小的串。、
思路分析:
开始的时候 用后缀数组写,然后根据sa的有序性。你就可以知道哪个串没有出现了。
但是题目卡了倍增哦。。。
自习想一想的话,我们用 sa 数组,也就是想知道这个串有没有出现过,也就是判断重复,却浪费了 O (n * lg n)...
判断重复为什么没想到hash 。
把每一个长度的子串都hash 出来,用八进制表示,这样的话就可以得到一个递增的hash值。
将之存入hash 数组。找到第一个空的hash的下标,就是第一个没出现的了,然后分解每一位就得到了答案。这代码 hdu rank 1...(2014 - 07 - 30...)
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;bool hash[1000007];char str[1000007];int pow[10];void print(int x,int dep,int cnt){ if(x) { print(x/8,dep+1,cnt); putchar(x%8+'A'); return; } else if(dep<cnt) { while(dep<cnt) { putchar('A'); dep++; } }}int main(){ pow[0]=1; for(int i=1; i<=8; i++)pow[i]=pow[i-1]*8; int T; scanf("%d",&T);getchar(); while(T--) { gets(str); int n=strlen(str); bool found=false; for(int len=1; len<=7; len++) { memset(hash,false,sizeof hash); int init=0; int m=min(len,n); for(int i=0; i<m; i++) { init=str[i]-'A'+init*8; } hash[init]=true; for(int i=len; i<n; i++) { init-=pow[len-1]*(str[i-len]-'A'); init=init*8+str[i]-'A'; hash[init]=true; } for(int i=0; i<pow[len]; i++) { if(!hash[i]) { print(i,0,len); puts(""); found=true; break; } } if(found)break; } } return 0;}
0 0
- hdu 4886 TIANKENG’s restaurant(Ⅱ) (hash)
- HDU 4886 TIANKENG’s restaurant(Ⅱ) (暴力+Hash)
- HDU 4886 TIANKENG’s restaurant(Ⅱ) hash+dfs
- HDU 4886 TIANKENG’s restaurant(Ⅱ)【hash+暴力】
- hdu 4886 TIANKENG’s restaurant(Ⅱ) 字符串
- HDU 4886 TIANKENG’s restaurant(Ⅱ)
- hdu 4886 TIANKENG’s restaurant(2)(hash+暴力)
- HDU 4886 TIANKENG’s restaurant(Ⅱ) (哈希)
- HDU 4886 TIANKENG’s restaurant(Ⅱ) (枚举 哈希)
- hdu TIANKENG’s restaurant
- TIANKENG’s restaurant HDU
- HDU 4886 TIANKENG’s restaurant(Ⅱ) 思维+字符串哈希
- TIANKENG’s restaurant(Ⅱ) hdu 4886 思维暴力
- HDU 4883 TIANKENG’s restaurant (贪心)
- hdu 4883 TIANKENG’s restaurant(思路)
- HDU 4883 TIANKENG’s restaurant
- hdu 4883 TIANKENG’s restaurant
- HDU 4883 TIANKENG’s restaurant
- 20140729
- 使用Ant批量打包Android项目
- 科技使人“变傻”八种方式:没导航就会迷路
- 0-1背包-uva562-Dividing coins
- 链接方式
- hdu 4886 TIANKENG’s restaurant(Ⅱ) (hash)
- LeetCode: Best Time to Buy and Sell Stock II
- 自定义圆角和园边的实现
- sched_yield()函数 高级进程管理
- 字符串匹配的KMP算法
- ORA-00313 open failed for members of log group解决办法
- 有一段文本,将文本中的所有单词,存放到一个字符指针数组中(要求每个单词内存恰好)。
- 标准C语言各种时间函数用法
- Julia: using Gadfly using Cairo的一个郁闷的问题!