题目链接:

I - Magic

FZU - 2280

学习链接:

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代码:

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<cmath>
  4. #include<string>
  5. #include<cstring>
  6. using namespace std;
  7. # define ll long long
  8. # define ull unsigned long long
  9. # define inf 0x3f3f3f3f
  10. const int ull base=;
  11. const int maxn = 2e5+;
  12. char str[maxn];
  13. ull Hash[+][+],ind[maxn];
  14. int val[maxn],length[maxn];
  15. void init()
  16. {
  17. ind[]=;
  18. for(int i=; i<; i++)
  19. {
  20. ind[i]=ind[i-]*base;
  21. }
  22. }
  23. void hs(int id,char *s)
  24. {
  25. int len=strlen(s+);
  26. Hash[id][]=;
  27. for(int i=; i<=len; i++)
  28. {
  29. Hash[id][i]=Hash[id][i-]*base+(ull)s[i];
  30. }
  31. }
  32. ull getsub(int id,int l,int r)
  33. {
  34. return Hash[id][r]-Hash[id][l-]*ind[r-l+];
  35. }
  36. int n;
  37. int cal(int t)
  38. {
  39. int ans=;
  40. ull tmp=getsub(t,,length[t]);
  41. for(int i=; i<=n; i++)
  42. {
  43. if(val[i]>val[t]||length[i]<length[t])
  44. continue;
  45. ull tmpans=getsub(i,length[i]-length[t]+,length[i]);
  46. if(tmpans==tmp)
  47. ans++;
  48. }
  49. return ans;
  50. }
  51. int main()
  52. {
  53. init();
  54. int T;
  55. scanf("%d",&T);
  56. while(T--)
  57. {
  58. scanf("%d",&n);
  59. for(int i=; i<=n; i++)
  60. {
  61. scanf("%s",str+);
  62. hs(i,str);
  63. scanf("%d",&val[i]);
  64. length[i]=strlen(str+);
  65. }
  66. int m;
  67. scanf("%d",&m);
  68. int op,st,ed;
  69. for(int i=; i<=m; i++)
  70. {
  71. scanf("%d",&op);
  72. if(op==)
  73. {
  74. scanf("%d %d",&st,&ed);
  75. val[st]=ed;
  76. }
  77. else
  78. {
  79. scanf("%d",&st);
  80. int ans=cal(st);
  81. printf("%d\n",ans);
  82. }
  83. }
  84. }
  85. return ;
  86. }

I - Magic FZU - 2280 (字符串hash)的更多相关文章

  1. 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 ...

  2. FZU 2280 Magic(字符串Hash)题解

    题意:给你n个字符串,每个字符串有一个值w,有q次询问,一共两种操作:一是“1 x y”表示把第x个串的w变为y:二是“2 x”,输出第x个串能放几次魔法.放魔法的条件是这样:用串x放魔法,如果在1~ ...

  3. 各种字符串Hash函数(转)

    /// @brief BKDR Hash Function /// @detail 本 算法由于在Brian Kernighan与Dennis Ritchie的<The C Programmin ...

  4. [知识点]字符串Hash

    1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...

  5. 【BZOJ-3555】企鹅QQ 字符串Hash

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1545  Solved: 593[Submit][Statu ...

  6. POJ 1200 字符串HASH

    题目链接:http://poj.org/problem?id=1200 题意:给定一个字符串,字符串只有NC个不同的字符,问这个字符串所有长度为N的子串有多少个不相同. 思路:字符串HASH,因为只有 ...

  7. LA4671 K-neighbor substrings(FFT + 字符串Hash)

    题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two s ...

  8. 各种字符串Hash函数比较(转)

    常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...

  9. 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774

    Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...

随机推荐

  1. RedisDesktopManager如何使用命令行?

    RedisDesktopManager如何使用命令行? 解决方法: 1.右键某个redis链接,如果还没创建连接,请参考:http://yayihouse.com/yayishuwu/chapter/ ...

  2. Unity 光照着色器

    光照着色器需要考虑光照的分类,一般分为漫反射和镜面反射. 漫反射计算基本光照: float brightness=dot(normal,lightDir)    将法线和光的入射方向进行点积运算,求出 ...

  3. Excel:11个查询函数组合

    还不懂?上栗子~ 1.普通查找 根据表二中的姓名,查找表一对应的应发工资.最基础的VLOOKUP函数就能搞定. 2.反向查找 根据表二姓名,查找表一编号.但表一中编号列在姓名列之前,无法直接使用VLO ...

  4. Linux系统下DNS主从配置详解

    一.DNS概述DNS(Domain Name System),即域名系统.因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. ...

  5. ttribute "xmlns" was already specified for element "web-app".

    今天导入了,一个javaweb项目,当自己对项目进行重命名的时候时候,但是web.xml直接爆出来一个"ttribute "xmlns" was already spec ...

  6. org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].Standard

    Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lan ...

  7. GDB调试qemu-kvm

    GDB调试qemu-kvm 前面几篇博文都是记录一些kvm相关包编译安装及使用,但都没深入去代码看看.看源码在配合上相关原理才能更好的理解kvm.但qemu-kvm的代码量很多,对我来讲直接看源码收获 ...

  8. Thymeleaf中的&&解析问题

    1.问题: 最近使用了新的html模板thymeleaf..在模板里使用js语法时遇到问题,&&不能正确的被解析,使用if(a&&b){}可以通过模板解析,但是浏览器上 ...

  9. python 第一类对象 闭包 迭代器

    ########################总结########################### 1. 函数名 -> 第一类对象 函数名就是变量名. 函数可以赋值 函数可以作为集合类的 ...

  10. [JUC-4]ThreadPoolExecutor源码分析

    相关博文: https://segmentfault.com/a/1190000008693801 https://www.jianshu.com/p/fa1eac9710c8 //构造器1 publ ...