BZOJ 3098
: Hash Killer II 时间限制: Sec 内存限制: MBSec Special Judge
提交: 解决:
[提交][][]
题目描述 这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题:
给你一个长度为N的字符串S,求有多少个不同的长度为L的子串。
子串的定义是S[l]、S[l + ]、... S[r]这样连续的一段。
两个字符串被认为是不同的当且仅当某个位置上的字符不同。 VFleaKing一看觉得这不是Hash的裸题么!于是果断写了哈希 + 排序。
而hzhwcmhf神犇心里自然知道,这题就是后缀数组的height中 < L的个数 + ,就是后缀自动机上代表的长度区间包含L的结点个数,就是后缀树深度为L的结点的数量。
但是hzhwcmhf神犇看了看VFleaKing的做法表示非常汗。于是想卡掉他。 VFleaKing使用的是字典序哈希,其代码大致如下:
u64 val = ;
for (int i = ; i < l; i++)
val = (val * base + s[i] - 'a') % Mod;
u64是无符号int64,范围是[, ^)。
base是一个常量,VFleaKing会根据心情决定其值。
Mod等于1000000007。
VFleaKing还求出来了base ^ l % Mod,即base的l次方除以Mod的余数,这样就能方便地求出所有长度为L的子串的哈希值。
然后VFleaKing给哈希值排序,去重,求出有多少个不同的哈希值,把这个数作为结果。
其算法的C++代码如下: typedef unsigned long long u64; const int MaxN = ; inline int hash_handle(const char *s, const int &n, const int &l, const int &base)
{
const int Mod = ; u64 hash_pow_l = ;
for (int i = ; i <= l; i++)
hash_pow_l = (hash_pow_l * base) % Mod; int li_n = ;
static int li[MaxN]; u64 val = ;
for (int i = ; i < l; i++)
val = (val * base + s[i] - 'a') % Mod;
li[li_n++] = val;
for (int i = l; i < n; i++)
{
val = (val * base + s[i] - 'a') % Mod;
val = (val + Mod - ((s[i - l] - 'a') * hash_pow_l) % Mod) % Mod;
li[li_n++] = val;
} sort(li, li + li_n);
li_n = unique(li, li + li_n) - li;
return li_n;
} hzhwcmhf当然知道怎么卡啦!但是他想考考你。 输入 没有输入。 输出 你需要输出一组数据使得VFleaKing的代码WA掉。我们会使用Special Judge检查你的结果的正确性。
第一行两个用空格隔开的数n、l。
第二行是一个长度为n的字符串。只能包含'a'~'z'。
需要保证1 <= n <= ^, <= l <= n,
不符合以上格式会WA。
不要有多余字符,很可能导致你WA。 样例输入 没有 样例输出 buaabuaa (当然这个输出是会WA的) 提示 如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。 来源 VFleaKing & hzhwcmhf
题目
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std; int main()
{
srand((unsigned)time());
int a=rand()%+;
cout<<a<<' ';
int b=rand()%+;
cout<<b<<endl;
for(int i=;i<=a;++i)
cout<<char(rand()%+);
return ;
}
代码
做法是输出一组随机字符,个数在50000-100000个
但是srand(time(NULL));这样写就会RE,去掉time就不会RE,明明在电脑上运行是不会RE的好吗,初来乍到,不懂BZOJ的一些潜规则,例如空间限制算上头文件
被坑的很惨……
提示已经写的很明白了
提示
如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%
所以就输出了较大的数据
BZOJ 3098的更多相关文章
- BZOJ 3098: Hash Killer II(新生必做的水题)
3098: Hash Killer II Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1555 Solved: ...
- BZOJ 3098 Hash Killer II
3098: Hash Killer II Description 这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题: 给你一个长度为N的字符串S,求有多少个不同的长度为L的子串. 子串 ...
- 【BZOJ 3098】 Hash Killer II
Description 这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题:给你一个长度为N的字符串S,求有多少个不同的长度为L的子串.子串的定义是S[l].S[l + 1].... S ...
- 洛谷 P3370 字符串哈希 (模板)
<题目链接> <转载于 >>> > 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共 ...
- 转载:字符串hash总结(hash是一门优雅的暴力!)
转载自:远航休息栈 字符串Hash总结 Hash是什么意思呢?某度翻译告诉我们: hash 英[hæʃ] 美[hæʃ]n. 剁碎的食物; #号; 蔬菜肉丁;vt. 把…弄乱; 切碎; 反复推敲; 搞糟 ...
- 转载:字符串HASH
转载自:Slager_Z 字符串Hash总结 Hash是什么意思呢?某度翻译告诉我们: hash 英[hæʃ] 美[hæʃ]n. 剁碎的食物; #号; 蔬菜肉丁;vt. 把…弄乱; 切碎; 反复推敲; ...
- Hash基础
BKDR Hash: 选取恰当的进制,可以把字符串中的字符看成一个大数字中的每一位数字,不过比较字符串和比较大数字的复杂度并没有什么区别 首先不要把任意字符对应到数字0,比如假如把a对应到数字0,那么 ...
- 【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers(自用,怕荒废了最后的六月考试月,刷刷水题,水水更健康)
BZOJ初级水题列表——献给那些想要进军BZOJ的OIers 代码长度解释一切! 注:以下代码描述均为C++ RunID User Problem Result Memory Time Code_Le ...
- BZOJ刷题指南(转)
基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...
随机推荐
- Camera2与TextureView使用
package com.intsig.bcrsdk.demo.Activity; import android.annotation.TargetApi; import android.app.Act ...
- 集大通APP案例分析
前言 很多同学有误解: 软件工程课是否就是理论课? 或者是几个牛人拼命写代码,其他人打酱油的课? 要不然就是学习一个程序语言,搞一个职业培训的课? 都不对!软件工程有理论,有实践,更重要的是分析,思辨 ...
- document.querySelector()和document.querySelectorAll()
HTML5向Web API新引入了 document.querySelector()和document.querySelectorAll()两个方法,都可以接收三种类型的参数:id(#),class( ...
- 实现AJAX跨域访问方式一
1.添加pom依赖 <dependency> <groupId>com.thetransactioncompany</groupId> <artifactId ...
- java基础知识-冒泡排序
//冒泡排序,从数组前面向后循环比较 public static void sort1(int[] aa){ int size=aa.length; int temp; //循环数组 for(int ...
- Docker实战系列一:初识Docker for Windows
windows下安装Docker官网教程Install Docker for Windows Docker配置官网教程Get started with Docker for Windows
- Shiro 的 HelloWorld
密码文件 [users] zhang=123 wang=123 测试 package org.zln.hello; import org.apache.log4j.LogManager; import ...
- 多线程 定时器 Timer TimerTask
定时器是一种特殊的多线程,使用Timer来安排一次或者重复执行某个任务 package org.zln.thread; import java.util.Date; import java.util. ...
- DataTable定义
DataTable是一个临时保存数据的网格虚拟表(表示内存中数据的一个表.).DataTable是ADO dot net 库中的核心对象.它可以被应用在 VB 和 ASP 上.它无须代码就可以简单的绑 ...
- null?对象?异常?到底应该如何返回错误信息
这篇文章记录我的一些思考.在工作了一段时间之后. 问题的核心很简单:到底如何返回错误信息. 学生时代,见到过当时的老师的代码: if (foo() == null) { } 当然,这位老师是一位比较擅 ...