题意

题目链接

Sol

\(f[i][j]\)表示匹配到第\(i\)个串,当前在主串的第\(j\)个位置

转移的时候判断一下是否可行就行了。随便一个能搞字符串匹配的算法都能过

复杂度\(O(|S| K a_i)\)

  1. #include<bits/stdc++.h>
  2. #define Pair pair<int, int>
  3. #define MP(x, y) make_pair(x, y)
  4. #define fi first
  5. #define se second
  6. //#define int long long
  7. #define ull signed long long
  8. #define LL long long
  9. #define Fin(x) {freopen(#x".in","r",stdin);}
  10. #define Fout(x) {freopen(#x".out","w",stdout);}
  11. using namespace std;
  12. const int MAXN = 3e6 + 10, mod = 1e9 + 7, INF = 1e9 + 10;
  13. const double eps = 1e-9;
  14. template <typename A, typename B> inline bool chmin(A &a, B b){if(a > b) {a = b; return 1;} return 0;}
  15. template <typename A, typename B> inline bool chmax(A &a, B b){if(a < b) {a = b; return 1;} return 0;}
  16. template <typename A, typename B> inline LL add(A x, B y) {if(x + y < 0) return x + y + mod; return x + y >= mod ? x + y - mod : x + y;}
  17. template <typename A, typename B> inline void add2(A &x, B y) {if(x + y < 0) x = x + y + mod; else x = (x + y >= mod ? x + y - mod : x + y);}
  18. template <typename A, typename B> inline LL mul(A x, B y) {return 1ll * x * y % mod;}
  19. template <typename A, typename B> inline void mul2(A &x, B y) {x = (1ll * x * y % mod + mod) % mod;}
  20. template <typename A> inline void debug(A a){cout << a << '\n';}
  21. template <typename A> inline LL sqr(A x){return 1ll * x * x;}
  22. inline int read() {
  23. char c = getchar(); int x = 0, f = 1;
  24. while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
  25. while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  26. return x * f;
  27. }
  28. int K;
  29. char s[MAXN], tmp[MAXN];
  30. int f[101][100001];
  31. ull ha[MAXN], po[MAXN], base = 27;
  32. ull Query(int l,int r) {
  33. return ha[r] - po[r - l + 1] * ha[l - 1];
  34. }
  35. signed main() {
  36. K = read();
  37. scanf("%s", s + 1);
  38. int N = strlen(s + 1); po[0] = 1;
  39. for(int i = 1; i <= N; i++) po[i] = base * po[i - 1], ha[i] = ha[i - 1] * base + s[i];
  40. for(int i = 0; i <= N; i++) f[0][i] = 1;
  41. for(int i = 1; i <= K; i++) {
  42. int num = read();
  43. for(int j = 1; j <= num; j++) {
  44. scanf("%s", tmp + 1);
  45. int l = strlen(tmp + 1);
  46. ull val = 0;
  47. for(int k = 1; k <= l; k++) val = val * base + tmp[k];
  48. for(int k = l; k <= N; k++) {
  49. if(val == Query(k - l + 1, k)) {
  50. add2(f[i][k], f[i - 1][k - l]);
  51. }
  52. }
  53. }
  54. }
  55. int ans = 0;
  56. for(int i = 1; i <= N; i++) add2(ans, f[K][i]);
  57. cout << ans;
  58. return 0;
  59. }
  60. /*
  61. */

洛谷P4591 [TJOI2018]碱基序列(hash dp)的更多相关文章

  1. 洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】

    题目链接 洛谷P4591 题解 设\(f[i][j]\)表示前\(i\)个串匹配到位置\(j\)的方案数,匹配一下第\(i\)个串进行转移即可 本来写了\(hash\),发现没过,又写了一个\(KMP ...

  2. 洛谷 P4593 [TJOI2018]教科书般的亵渎

    洛谷 P4593 [TJOI2018]教科书般的亵渎 神仙伯努利数...网上一堆关于伯努利数的东西但是没有证明,所以只好记结论了? 题目本质要求\(\sum_{i=1}^{n}i^k\) 伯努利数,\ ...

  3. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

  4. 洛谷2344 奶牛抗议(DP+BIT+离散化)

    洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...

  5. Lightning Conductor 洛谷P3515 决策单调性优化DP

    遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序 ...

  6. 洛谷P1541 乌龟棋(四维DP)

    To 洛谷.1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游 ...

  7. 【洛谷】P1052 过河【DP+路径压缩】

    P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...

  8. 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)

    题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...

  9. 洛谷1736(二维dp+预处理)

    洛谷1387的进阶版,但很像. 1387要求是“全为1的正方形”,取dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]))吧?这个有“只有对 ...

随机推荐

  1. 访问https 报错ssl 协议异常

    报错信息: ERROR][http-nio-8888-exec-1] - Servlet.service() for servlet [dispatcherServlet] in context wi ...

  2. web前端异步数据交互(长连接)

    Workers异步任务 开始(注册): divobjx=document.getElementsByTagName("div")[0]; var workdong=new Work ...

  3. Hystrix 停止开发。。。Spring Cloud 何去何从?

    栈长得到消息,Hystrix 停止开发了... 大家如果有对 Hystrix 不清楚的,请看下这篇文章:分布式服务防雪崩熔断器,Hystrix理论+实战. 来看下 Hystrix 停止开发官宣: ht ...

  4. nginx、swoole高并发原理初探

    阅前热身 为了更加形象的说明同步异步.阻塞非阻塞,我们以小明去买奶茶为例. 同步与异步 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式. 同步:当一个同步调用发出去后,调用者要一直等待调 ...

  5. C#.Net Core 操作Docker中的redis数据库

    做软件开发的人,会在本机安装很多开发时要用到的软件,比如数据库,有MS SQL Server,MySQL,等,如果每种数据库都按照在本机确实有点乱,这个时候我们就想用虚拟机来隔离,这样就不会扰乱本机一 ...

  6. SQL语句方法语法总结(一)

    1.distinct:返回不重复.唯一的值. select distinct col_name from tbl_name --表中的col_name 列的值 如果有10条一样的,仅返回一条. 2.w ...

  7. 函数计算 Python 连接 SQL Server 小结

    python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装 pymssql .由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需 ...

  8. 始于阿里,回归社区:阿里8个项目进入CNCF云原生全景图

    破土而出的生命力,源自理想主义者心底对技术的信念. 云原生技术正席卷全球,云原生基金会在去年KubeCon +CloudNativeCon NA的现场宣布: 其正在孵化的项目已达14个,入驻的厂家或产 ...

  9. 深入理解redis数据类型

    转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9720033.html redis的存储模型 redis不是普通的键值对存储,它实际上是一个数据结构存储服务器 ...

  10. Scrapy爬虫(5)爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...