当前位置: 首页 > news >正文

【字符串】AC自动机+dp

关于cnt

只有这一种

标记危险 cnt[p]=1 cnt[p]|=cnt[ne[p]]

记录个数cnt[p]++; cnt[p]+=cnt[ne[p]]

P3041 [USACO12JAN] Video Game G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<iostream>
using namespace std;
#include<cstring>
const int M=1010;
const int NODE=15*20+10;
int f[M][NODE];int ne[NODE];int cnt[NODE];
int tr[NODE][3];int idx=0;
int get(char c){
if(c=='A')return 0;
if(c=='B')return 1;
if(c=='C')return 2;
}void insertt(string str){
int p=0;
for(int i=0;str[i];i++){int u=get(str[i]);if(!tr[p][u])tr[p][u]=++idx;p=tr[p][u];
}
cnt[p]++;}void bui(){int q[NODE];
int hh=0;int tt=-1;
for(int i=0;i<3;i++)if(tr[0][i])q[++tt]=tr[0][i];while(hh<=tt){int t=q[hh++];for(int i=0;i<3;i++){int p=tr[t][i];if(!p)tr[t][i]=tr[ne[t]][i];else {ne[p]=tr[ne[t]][i];cnt[p]+=cnt[ne[p]];q[++tt]=p;}}}}int main(){int n,m;
cin>>n>>m;
while(n--){string str;cin>>str;insertt(str);
}
bui();memset(f,-0x3f,sizeof(f));
f[0][0]=0;
for(int i=0;i<m;i++){for(int j=0;j<=idx;j++){for(int u=0;u<3;u++){int p=tr[j][u];f[i+1][p]=max(f[i+1][p],f[i][j]+cnt[p]);}}
}int ans=0;
for(int j=0;j<=idx;j++){
ans=max(ans,f[m][j]);
}
cout<<ans;}

P4052 [JSOI2007] 文本生成器 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

P4052[JSOI2007]文本生成器 - 洛谷专栏 (luogu.com.cn)

写了一遍10pts

写了两遍60pts

啊原来是取模,虽然sum>bu,但是sum%mod>bu%mod不一定

#include<iostream>
using namespace std;
#define ll long long
const ll mod=1e4+7;
const int NODE=100*60+10;
int tr[NODE][26];
int ne[NODE];int cnt[NODE];
int idx=0;
ll f[110][NODE];//我们虽然不会至少匹配一个
//但一个也不匹配是基础的danvoid insertt(string str){
int p=0;
for(int i=0;str[i];i++){
int u=str[i]-'A';
if(!tr[p][u])tr[p][u]=++idx;
p=tr[p][u];
}
cnt[p]++;
}void bui(){
int q[NODE];
int hh=0;int  tt=-1;
for(int i=0;i<26;i++){if(tr[0][i])q[++tt]=tr[0][i];
}
while(hh<=tt){int t=q[hh++];for(int i=0;i<26;i++){int p=tr[t][i];if(!p)tr[t][i]=tr[ne[t]][i];else  {ne[p]=tr[ne[t]][i];cnt[p]|=cnt[ne[p]];q[++tt]=p;}}
}
}ll  ksm(ll a,ll b){
ll res=1;
while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;
}
return res;}
int main(){
int n,m;
cin>>n>>m;
while(n--){string str;cin>>str;insertt(str);
}
bui();f[0][0]=1;
for(int i=0;i<m;i++){for(int j=0;j<=idx;j++){for(int u=0;u<26;u++){int p=tr[j][u];if(cnt[p])continue;f[i+1][p]=(f[i+1][p]+f[i][j])%mod;}}
}ll bu=0;
for(int j=0;j<=idx;j++){bu=(bu+f[m][j])%mod;
}ll sum=ksm(26,m);cout<<(sum-bu+mod)%mod<<endl;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于YOLO深度学习和百度AI接口的手势识别与控制项目
  • 2. 变量和指令(omron 机器自动化控制器)——1
  • 速通LLaMA1:《LLaMA: Open and Efficient Foundation Language Models》全文解读
  • 基于http请求的一种安全校验认证方案记录
  • 一个矩阵的行数和列数可能不同,为什么它的行秩和列秩始终相同
  • TCP交互通讯在Windows中的频率
  • MYSQL数据库基础篇——DDL
  • CesiumJS+SuperMap3D.js混用实现天际线分析
  • 求两数最小公倍数、求素数个数、求能被1-n中所有数整除最小的数
  • 无人机之悬停精度篇
  • 学LabVIEW编程,看编程书有些看不懂怎么办?
  • Python中匹配HTML标签时<.*>和<.*?>有什么区别
  • python多线程程序设计 之二
  • Linux文件系统(上)
  • 调整兰德系数-评估聚类效果的指标
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CentOS7 安装JDK
  • echarts花样作死的坑
  • FineReport中如何实现自动滚屏效果
  • JavaWeb(学习笔记二)
  • jquery ajax学习笔记
  • Js基础知识(四) - js运行原理与机制
  • JS专题之继承
  • linux安装openssl、swoole等扩展的具体步骤
  • React Native移动开发实战-3-实现页面间的数据传递
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从零搭建Koa2 Server
  • 悄悄地说一个bug
  • Android开发者必备:推荐一款助力开发的开源APP
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #70结构体案例1(导师,学生,成绩)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二十六)Java 数据结构
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)事件系统
  • (算法)区间调度问题
  • (一)基于IDEA的JAVA基础1
  • (转)socket Aio demo
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 材料检测系统崩溃分析
  • .net生成的类,跨工程调用显示注释
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .Net中ListT 泛型转成DataTable、DataSet
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ?
  • @media screen 针对不同移动设备
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [BUG]Datax写入数据到psql报不能序列化特殊字符