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: 前面在 ...
随机推荐
- Html的简单学习笔记
1.Html简介 1)什么是html: HyperText Markup Language:超文本标记语言,网页语言. >超文本:超出文本范围. >标记: html中所有的操作都是使用标记 ...
- Java多线程-详细版
基本概念解释 并发:一个处理器处理多个任务,这些任务对于处理器来说是交替运行的,每个时间点只有一个任务在进行. 并行:多个处理器处理多个任务,这些任务是同时运行的.每个时间点有多个任务同时进行. 进程 ...
- 手机nv
NV值是记录手机的射频参数的,和手机的IMEI号.手机信号.WIFI信号等有关,如果NV值刷没了,手机没有这些校准的数据了,会对手机有一定的影响. qcn里面包含手机的imei 所有改变imei就改变 ...
- CentOS 添加新的硬盘之后不停机操作
echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/s ...
- assert的使用
1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enableassertions 2.assert格式 (1)as ...
- (Dijkstra) POJ1797 Heavy Transportation
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 53170 Accepted: ...
- M1-day08-数据库加锁
一.关于数据库加锁主要分为几类 1.原生sql 1.开启事物 begin; select * from host for update; commit; 注意:INNODB支持表锁和行锁,MyISAM ...
- bzoj2434 fail树 + dfs序 + 树状数组
https://www.lydsy.com/JudgeOnline/problem.php?id=2434 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现, ...
- Java基础内部类、包的声名、访问修饰符、代码块整理
内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...
- Sqlserver 数据库定时自动备份
sqlserver 可以通过微软工具 SQL Server Management Studio 进行数据库定时自动备份,具体步骤如下: 1,打开SQL Server Management Studi ...