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: 前面在 ...
随机推荐
- 关于递推算法求解约瑟夫环问题P(n,m,k,s)
一. 问题描述 已知n个人,分别以编号1,2,3,...,n表示,围坐在一张圆桌周围.从编号为k的人开始报数1,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去, ...
- 第三十五节,目标检测之YOLO算法详解
Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object de ...
- 第一节,初识OpenCV3-图像的读、写、显、格式转化等
之前一直在看深度学习,突然用到了对图像处理的东西,所以过来补充一下OpenCV基础. 就顺便从网上了买了一本OpenCV 3计算机视觉这本书,这本书比较薄,但是目前已经够我用了,在这里就记录一下我的学 ...
- session会话对象
一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...
- memset()函数及其作用(转)
1. memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组, c:是赋给buffer的值, c ...
- Percona xtrabackup
关于percona xtrabackup percona xtrabackup是世界上唯一开源的.免费的MySQL热备份软件,可以为InnoDB存储引擎和XtraDB存储引擎进行不间断的备份, ...
- 多线程程序在单核cpu与多核cpu上是怎么工作的?
转自 1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时 ...
- 学习笔记(node.js)
因为做的笔记太多了,所以就直接发到百度云盘了. 第一天:是关于环境的配置,以及简单的练习. 云盘链接地址:链接:https://pan.baidu.com/s/1WLWtyTKWaQ32JpDUCF2 ...
- gitlab ssh-key
1.使用 ssh-keygen 生成一下ssh key 2. cat 对应路径 复制 ssh key到项目 settings --> deploy keys 添加 3. enable这个 key
- 为什么要两次调用encodeURI来解决乱码问题
.encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号. 假设页面端输入的 ...