【BZOJ5337】[TJOI2018]str(动态规划,哈希)
【BZOJ5337】[TJOI2018]str(动态规划,哈希)
题面
题解
就很呆。。。
显然按层\(dp\),如果能够匹配上就进行转移,直接哈希判断是否能够匹配就好了。。。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MOD 1000000007
#define MAX 10010
#define ull unsigned long long
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
const ull base=297;
ull h[MAX],pw[MAX];
int n,m,ans,len;char s[MAX],ch[MAX];
int f[2][MAX];
ull Hash(int l,int r){return h[r]-h[l-1]*pw[r-l+1];}
int main()
{
scanf("%d",&n);scanf("%s",s+1);len=strlen(s+1);
pw[0]=1;for(int i=1;i<=len;++i)pw[i]=pw[i-1]*base;
for(int i=1;i<=len;++i)h[i]=h[i-1]*base+s[i];
int nw=1,pw=0;
for(int i=0;i<=len;++i)f[0][i]=1;
while(n--)
{
scanf("%d",&m);for(int i=0;i<=len+1;++i)f[nw][i]=0;
while(m--)
{
scanf("%s",ch+1);int l=strlen(ch+1);
ull val=0;for(int i=1;i<=l;++i)val=val*base+ch[i];
for(int i=1;i+l-1<=len;++i)if(Hash(i,i+l-1)==val)add(f[nw][i+l],f[pw][i]);
}
nw^=1;pw^=1;
}
for(int i=1;i<=len+1;++i)add(ans,f[pw][i]);
printf("%d\n",ans);
return 0;
}
【BZOJ5337】[TJOI2018]str(动态规划,哈希)的更多相关文章
- BZOJ5337 [TJOI2018] 碱基序列 【哈希】【动态规划】
题目分析: 这道题的难点在于要取模,而题面没有写. 容易想到一个O(1E7)的dp.KMP或者哈希得到相关位置然后对于相关位置判断上一个位置有多少种情况. 代码: #include<bits/s ...
- BZOJ5337 [TJOI2018]str
题意 小豆参加了生物实验室.在实验室里,他主要研究蛋臼质.他现在研究的蛋臼质是由k个氨基酸按一定顺序构成的.每一个氨基酸都可能有a种碱基序 列si_j 构成.现在小豆有一个碱基串s,小豆想知道在这个碱 ...
- bzoj 5337 [TJOI2018] str
bzoj 5337 [TJOI2018] str Link Solution 水题 直接 \(f[i][j]\) 表示以第 \(i\) 位为结束位置,当前已经匹配了前 \(j\) 个氨基酸的方案数 使 ...
- 剑指 Offer 48. 最长不含重复字符的子字符串 + 动态规划 + 哈希表 + 双指针 + 滑动窗口
剑指 Offer 48. 最长不含重复字符的子字符串 Offer_48 题目详情 解法分析 解法一:动态规划+哈希表 package com.walegarrett.offer; /** * @Aut ...
- 封装redis(set/get/delete)str和哈希类型
将Redis的常用操作封装了一下: import redis class MyRedis(): def __init__(self,ip,passwd,port=6379,db=0): #构造函数 t ...
- hdu 4300 Clairewd’s message 字符串哈希
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- Python学习日记:day5-------dict字典
#字典dict------->唯一的映射类型 1.数据类型的划分 数据类型划分为可变数据类型和不可变数据类型. 不可变数据类型:tupe(元组).bool.int.str 可 ...
- BZOJ 3097: Hash Killer I【构造题,思维题】
3097: Hash Killer I Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 963 Solved: 36 ...
- 4.JAVA-数组、String详解
1.数组 public class Test{ public static void main(String args[]){ int[] intArray = new int[] {1,4,3,2, ...
随机推荐
- 解决ImportError: cannot import name 'webdriver' from 'selenium' (C:\Users\Mr.Su\PycharmProjects\***\venv\selenium.py)
报错信息如下图所示: 解决方案:将项目根目录下的自己创建的selenium.py文件重命名.
- PV、TPS、QPS计算公式(转)
英文解释: PV=page viewTPS=transactions per secondQPS=queries per secondRPS=requests per second RPS=并发数/平 ...
- python自动化常见问题汇总
1.如何提高selenium脚本的执行速度? Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程 ...
- C#设计模式之9:模板方法
模板方法 模板方法是一个方法,定义了算法的步骤,并允许子类为一个或多个步骤提供实现. 本例中用冲泡咖啡和茶的例子来说明: 上图说明了冲泡咖啡和茶的步骤,可以看出冲泡咖啡和茶的步骤差不多,很相似,先来看 ...
- 994.Contiguous Array 邻近数组
描述 Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and ...
- Spring是如何校验XML的
首先来看下xml的一些概念: xml的schema里有namespace,可以给它起个别名.比如常见的spring的namespace: xmlns:mvc="http://www.spri ...
- Netty ByteBuf和Nio ByteBuffer
参考https://blog.csdn.net/jeffleo/article/details/69230112 一.简介 Netty中引入了ByteBuf,它相对于ByteBuffer来说,带来了很 ...
- 关于Linux系统下jdk版本切换问题(alternatives命令的使用)
[root@danny lib]# cd /usr/lib/jvm [root@danny jvm]# [root@danny jvm]# ls java java--openjdk-.b13.el7 ...
- sql 保留2位小数/换行
2.176544保留两位小数 1.select Convert(decimal(18,2),2.176544) 结果:2.18 2.select Round(2.176544,2) 结果:2.180 ...
- java 中 Math类
package cn.liuliu.com; import java.math.BigDecimal; import java.math.BigInteger; /* * 一.Math类? * * 1 ...