设为首页 加入收藏

TOP

HDU 4886 TIANKENG’s restaurant(Ⅱ)
2015-07-20 18:02:06 来源: 作者: 【 】 浏览:2
Tags:HDU 4886 TIANKENG restaurant

题意:

一个字符串有许多子串 现要找出最短的字典序最小的不是它的子串的串 这个长串只有A~H字母


思路:

YY一下答案串能有多长 8^7就比长串长了 所以也就是7的长度

那么只需要枚举长度 利用哈希判定字符串出现的问题 如何哈希呢?

一共就8个字母明显搞成8进制数 例如 AABCAD 就是 001203(8) 只有7的长度连int都不会爆 哈希稳稳的

而且通过hash值可以很简单的转化回字符串 输出也方便


代码:

#include
  
   
#include
   
     #include
    
      using namespace std; #define N 1000010 char str[N]; int hash[N], num[N]; int ans, end; int main() { int t, i, j, len; scanf("%d", &t); while (t--) { scanf("%s", str + 1); len = strlen(str + 1); memset(hash, 0, sizeof(hash)); memset(num, 0, sizeof(num)); end = 8; for (j = 1; j <= 7; j++) { for (i = len; i >= j; i--) { hash[i] = hash[i - 1] * 8 + str[i] - 'A'; num[hash[i]]++; } for (i = 0; i < end; i++) { if (!num[i]) { ans = i; goto FZC; } num[i] = 0; } end *= 8; } FZC: i = 0; while (j--) { str[i++] = ans % 8 + 'A'; ans /= 8; } for (j = i - 1; j >= 0; j--) putchar(str[j]); puts(""); } return 0; } 
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 1024 Max Sum Plus Plus(DP) 下一篇杭电 1003 Max Sum

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: