I - Magic FZU - 2280 (字符串hash)
题目链接:
I - Magic
学习链接:
FZU - 2280 I - Magic
题目大意:
给你nn个字符串,每个字符串有一个值ww,有qq次询问,一共两种操作:一是“1,x,y”“1,x,y”表示把第xx个串的ww变为yy;二是“2,x”2,x”,输出第xx个串能放几次魔法。放魔法的条件是这样:用串x放魔法,如果在1~n个串中,一个串的ww不超过xx的ww并且xx是这个串的后缀,则算放了一次魔法,然后每次询问输出能放几个魔法。
具体思路:对于每个字符串hash一下,判断后缀,通过字符串hash判断就可以了。然后每次查询的时候O(n)查询就可以了。
AC代码:
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
# define ll long long
# define ull unsigned long long
# define inf 0x3f3f3f3f
const int ull base=;
const int maxn = 2e5+;
char str[maxn];
ull Hash[+][+],ind[maxn];
int val[maxn],length[maxn];
void init()
{
ind[]=;
for(int i=; i<; i++)
{
ind[i]=ind[i-]*base;
}
}
void hs(int id,char *s)
{
int len=strlen(s+);
Hash[id][]=;
for(int i=; i<=len; i++)
{
Hash[id][i]=Hash[id][i-]*base+(ull)s[i];
}
}
ull getsub(int id,int l,int r)
{
return Hash[id][r]-Hash[id][l-]*ind[r-l+];
}
int n;
int cal(int t)
{
int ans=;
ull tmp=getsub(t,,length[t]);
for(int i=; i<=n; i++)
{
if(val[i]>val[t]||length[i]<length[t])
continue;
ull tmpans=getsub(i,length[i]-length[t]+,length[i]);
if(tmpans==tmp)
ans++;
}
return ans;
}
int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%s",str+);
hs(i,str);
scanf("%d",&val[i]);
length[i]=strlen(str+);
}
int m;
scanf("%d",&m);
int op,st,ed;
for(int i=; i<=m; i++)
{
scanf("%d",&op);
if(op==)
{
scanf("%d %d",&st,&ed);
val[st]=ed;
}
else
{
scanf("%d",&st);
int ans=cal(st);
printf("%d\n",ans);
}
}
}
return ;
}
I - Magic FZU - 2280 (字符串hash)的更多相关文章
- Magic FZU - 2280 无脑HASH暴力
Kim is a magician, he can use n kinds of magic, number from 1 to n. We use string Si to describe mag ...
- FZU 2280 Magic(字符串Hash)题解
题意:给你n个字符串,每个字符串有一个值w,有q次询问,一共两种操作:一是“1 x y”表示把第x个串的w变为y:二是“2 x”,输出第x个串能放几次魔法.放魔法的条件是这样:用串x放魔法,如果在1~ ...
- 各种字符串Hash函数(转)
/// @brief BKDR Hash Function /// @detail 本 算法由于在Brian Kernighan与Dennis Ritchie的<The C Programmin ...
- [知识点]字符串Hash
1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...
- 【BZOJ-3555】企鹅QQ 字符串Hash
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1545 Solved: 593[Submit][Statu ...
- POJ 1200 字符串HASH
题目链接:http://poj.org/problem?id=1200 题意:给定一个字符串,字符串只有NC个不同的字符,问这个字符串所有长度为N的子串有多少个不相同. 思路:字符串HASH,因为只有 ...
- LA4671 K-neighbor substrings(FFT + 字符串Hash)
题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two s ...
- 各种字符串Hash函数比较(转)
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...
- 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774
Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...
随机推荐
- 第十一节、Harris角点检测原理(附源码)
OpenCV可以检测图像的主要特征,然后提取这些特征.使其成为图像描述符,这类似于人的眼睛和大脑.这些图像特征可作为图像搜索的数据库.此外,人们可以利用这些关键点将图像拼接起来,组成一个更大的图像,比 ...
- arm-fsl-linux-gnueabi交叉编译器安装
系统:Ubuntu 14.04 64bit 编译器gcc version 4.4.4 (4.4.4_09.06.2010) 解压编译器到相应路径(注:当我解压放到/home/cross_compile ...
- 解决jQuery ajax动态新增节点无法触发点击事件的问题
在写ajax加载数据的时候发现,后面添加进来的demo节点元素,失去了之前的点击事件.为什么点击事件失效,我们该怎么去解决呢? 其实最简单的方法就是直接在标签中写onclick="" ...
- 【清北学堂2018-刷题冲刺】Contest 5
这三个题写了一天半,第一个题写了大概一整天.出题人劝我从后往前写,我不听,结果T1想了+调了一天QWQWQ Task 1:序列 [问题描述] 定义一个"好的序列"为一个长度为M ...
- php 4种传值方式
我们定义page01.php和page02.php两个php文件,将page01中的内容想办法传递到page02,然后供我们继续使用. 第一种: 使用客户端浏览器的cookie.cookie很 ...
- 常见的Dos命令
dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录 注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. cd : 进入指定目录 cd.. : 退回到上一级目 ...
- bzoj1497 最小割
题意: 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前 ...
- 机器学习算法 Python&R 速查表
sklearn实战-乳腺癌细胞数据挖掘( 博主亲自录制) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- Zabbix Server 自带模板监控无密码MySQL数据库
Zabbix Server 自带模板监控无密码MySQL数据库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装MariaDB 1>.安装MariaDB [root ...
- 《Apache Kafka 实战》读书笔记-认识Apache Kafka
<Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...