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: 前面在 ...
随机推荐
- RedisDesktopManager如何使用命令行?
RedisDesktopManager如何使用命令行? 解决方法: 1.右键某个redis链接,如果还没创建连接,请参考:http://yayihouse.com/yayishuwu/chapter/ ...
- Unity 光照着色器
光照着色器需要考虑光照的分类,一般分为漫反射和镜面反射. 漫反射计算基本光照: float brightness=dot(normal,lightDir) 将法线和光的入射方向进行点积运算,求出 ...
- Excel:11个查询函数组合
还不懂?上栗子~ 1.普通查找 根据表二中的姓名,查找表一对应的应发工资.最基础的VLOOKUP函数就能搞定. 2.反向查找 根据表二姓名,查找表一编号.但表一中编号列在姓名列之前,无法直接使用VLO ...
- Linux系统下DNS主从配置详解
一.DNS概述DNS(Domain Name System),即域名系统.因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. ...
- ttribute "xmlns" was already specified for element "web-app".
今天导入了,一个javaweb项目,当自己对项目进行重命名的时候时候,但是web.xml直接爆出来一个"ttribute "xmlns" was already spec ...
- org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].Standard
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lan ...
- GDB调试qemu-kvm
GDB调试qemu-kvm 前面几篇博文都是记录一些kvm相关包编译安装及使用,但都没深入去代码看看.看源码在配合上相关原理才能更好的理解kvm.但qemu-kvm的代码量很多,对我来讲直接看源码收获 ...
- Thymeleaf中的&&解析问题
1.问题: 最近使用了新的html模板thymeleaf..在模板里使用js语法时遇到问题,&&不能正确的被解析,使用if(a&&b){}可以通过模板解析,但是浏览器上 ...
- python 第一类对象 闭包 迭代器
########################总结########################### 1. 函数名 -> 第一类对象 函数名就是变量名. 函数可以赋值 函数可以作为集合类的 ...
- [JUC-4]ThreadPoolExecutor源码分析
相关博文: https://segmentfault.com/a/1190000008693801 https://www.jianshu.com/p/fa1eac9710c8 //构造器1 publ ...