当前位置: 首页 > news >正文

BZOJ 3097: Hash Killer I

3097: Hash Killer I

Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special Judge
[Submit][Status][Discuss]

Description

这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题:
给你一个长度为N的字符串S,求有多少个不同的长度为L的子串。
子串的定义是S[l]、S[l + 1]、... S[r]这样连续的一段。
两个字符串被认为是不同的当且仅当某个位置上的字符不同。

VFleaKing一看觉得这不是Hash的裸题么!于是果断写了哈希 + 排序。
而hzhwcmhf神犇心里自然知道,这题就是后缀数组的height中 < L的个数 + 1,就是后缀自动机上代表的长度区间包含L的结点个数,就是后缀树深度为L的结点的数量。
但是hzhwcmhf神犇看了看VFleaKing的做法表示非常汗。于是想卡掉他。

VFleaKing使用的是字典序哈希,其代码大致如下:
u64 val = 0;
for (int i = 0; i < l; i++)
 val = val * base + s[i] - 'a';
u64是无符号int64,范围是[0, 2^64)。VFleaKing让val自然溢出。
base是一个常量,VFleaKing会根据心情决定其值。
VFleaKing还求出来了base ^ l,即base的l次方,这样就能方便地求出所有长度为L的子串的哈希值。
然后VFleaKing给哈希值排序,去重,求出有多少个不同的哈希值,把这个数作为结果。
其算法的C++代码如下:

typedef unsigned long long u64;

 

const int MaxN = 100000;

 

inline int hash_handle(const char *s, const int &n, const int &l, const int &base)
{
 u64 hash_pow_l = 1;
 for (int i = 1; i <= l; i++)
  hash_pow_l *= base;

 

 int li_n = 0;
 static u64 li[MaxN];

 

 u64 val = 0;
 for (int i = 0; i < l; i++)
  val = val * base + s[i] - 'a';
 li[li_n++] = val;
 for (int i = l; i < n; i++)
 {
  val = val * base + s[i] - 'a';
  val -= (s[i - l] - 'a') * hash_pow_l;
  li[li_n++] = val;
 }

 

 sort(li, li + li_n);
 li_n = unique(li, li + li_n) - li;
 return li_n;
}

hzhwcmhf当然知道怎么卡啦!但是他想考考你。

 

Input

 

没有输入。

 

Output

 

你需要输出一组数据使得VFleaKing的代码WA掉。我们会使用Special Judge检查你的结果的正确性。
输出文件共两行。
第一行两个用空格隔开的数n、l。
第二行是一个长度为n的字符串。只能包含'a'~'z'。
需要保证1 <= n <= 10^5, 1 <= l <= n,
不符合以上格式会WA。
不要有多余字符,很可能导致你WA。

 

Sample Input

没有

Sample Output

8 4
buaabuaa
(当然这个输出是会WA的)

HINT

orz 波兰人 & fotile96 & sillycross

Source

VFleaKing & hzhwcmhf

 

题目链接

 

 

 

转载于:https://www.cnblogs.com/m-m-m/p/8934125.html

相关文章:

  • [转组第一天] | 调研XSS攻击
  • 2018年最新搜索引擎转跳JavaScript代码(竞价广告专用)
  • Java多线程实现的三种方式
  • 服务端渲染
  • 【转】数据库范式(1NF 2NF 3NF BCNF)
  • 父元素与子元素之间的margin-top问题(css hack)
  • 20180427积累
  • 关于sqoop --split-by 及 -m的理解
  • 20165301陈潭飞2017-2018-2 20165301 实验三《Java面向对象程序设计》实验报告
  • 往idea中导入已有的web项目
  • webpakc4.0移除了 CommonsChunkPlugin 组建
  • 判断Python输入是否为数字、字符(包括正则表达式)
  • 《C》指针
  • HTML第二课——css【2】
  • taobao_api项目进展
  • [译]前端离线指南(上)
  • Android单元测试 - 几个重要问题
  • Docker容器管理
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • fetch 从初识到应用
  • git 常用命令
  • HashMap ConcurrentHashMap
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tweak 支持第三方库
  • 闭包,sync使用细节
  • 测试如何在敏捷团队中工作?
  • 彻底搞懂浏览器Event-loop
  • 程序员该如何有效的找工作?
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 简单易用的leetcode开发测试工具(npm)
  • 解决iview多表头动态更改列元素发生的错误
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前嗅ForeSpider中数据浏览界面介绍
  • 小程序测试方案初探
  • 小程序开发之路(一)
  • 小而合理的前端理论:rscss和rsjs
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • # 安徽锐锋科技IDMS系统简介
  • #14vue3生成表单并跳转到外部地址的方式
  • (12)Linux 常见的三种进程状态
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • . Flume面试题
  • ..回顾17,展望18
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net 获取url的方法