Wannafly Camp 2020 Day 2K 破忒头的匿名信 - AC自动机,dp
给定字典和文章,每个单词有价值,求写文章的最小价值
标准的 AC 自动机 dp,设 \(f[i]\) 表示写 \(s[1..i]\) 的最小价值,建立AC自动机后根据 trans 边暴力转移即可
建了个中间图结果被卡内存了,被迫删掉
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e5+5;
vector <pair<signed,signed> > g[N];
int slen[N],w[N],ttt;
int min(signed x,int y) {return min(1ll*x,y);}
int f[N];
void msgOccur(int len,int pos,int wei) {
++pos; ++ttt;
int p = pos-len;
//f[i]=min(f[i],f[g[i][j].first]+g[i][j].second);
//g[pos].push_back(make_pair(p,wei));
f[pos]=min(f[pos],f[p]+wei);
}
struct ACA{
signed c[N][26],val[N],fi[N],cnt,ans[N];
void init(){
memset(c,0,sizeof c); memset(val,0x3f,sizeof val);
memset(fi,0,sizeof fi); memset(ans,0,sizeof ans); cnt=0;}
void ins(char *str,int id){
int len=strlen(str), p=0;
for(int i=0;i<len;i++){
int v=str[i]-'a';
if(!c[p][v]) c[p][v]=++cnt;
p=c[p][v];}
val[p]=min(val[p],w[id]);
slen[p]=len;}
void build(){
queue <signed> q;
for(int i=0;i<26;i++) if(c[0][i]) fi[c[0][i]]=0, q.push(c[0][i]);
while(!q.empty()){
int u=q.front(); q.pop();
for(int i=0;i<26;i++)
if(c[u][i]) fi[c[u][i]]=c[fi[u]][i], q.push(c[u][i]);
else c[u][i]=c[fi[u]][i];}}
int query(char *s){
int len=strlen(s); int p=0;
for(int i=0;i<len;i++){
p=c[p][s[i]-'a'];
for(int t=p;t&&~val[t];t=fi[t])
msgOccur(slen[t],i,val[t]);}}
} AC;
int n; char p[N]; string mp[N];
signed main(){
scanf("%lld",&n);
memset(p,0,sizeof p); AC.init();
for(int i=1;i<=n;i++) {
scanf("%s%lld",p,&w[i]);
AC.ins(p,i);
mp[i]=p;
//slen[i]=strlen(p);
}
AC.build();
scanf("%s",p);
memset(f,0x3f,sizeof f);
f[0]=0;
int ans=AC.query(p);
int len=strlen(p);
cout<<(f[len]>=len*1000000000?-1:f[len])<<endl;
}
Wannafly Camp 2020 Day 2K 破忒头的匿名信 - AC自动机,dp的更多相关文章
- K 破忒头的匿名信(ac自动机+小dp)
题:https://ac.nowcoder.com/acm/contest/4010/K 题意:用一些模式串凑成一个目标串,每个模式串有消耗,问组合的最小消耗,或不能组成输出-1: 分析:典型的AC自 ...
- 2020 CCPC Wannafly Winter Camp Day2-K-破忒头的匿名信
题目传送门 sol:先通过AC自动机构建字典,用$dp[i]$表示长串前$i$位的最小代价,若有一个单词$s$是长串的前$i$项的后缀,那么可以用$dp[i - len(s)] + val(s)$转移 ...
- Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理
有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...
- Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...
- Wannafly Camp 2020 Day 3D 求和 - 莫比乌斯反演,整除分块,STL,杜教筛
杜教筛求 \(\phi(n)\), \[ S(n)=n(n+1)/2-\sum_{d=2}^n S(\frac{n}{d}) \] 答案为 \[ \sum_{d=1}^n \phi(d) h(\fra ...
- Wannafly Camp 2020 Day 2B 萨博的方程式 - 数位dp
给定 \(n\) 个数 \(m_i\),求 \((x_1,x_2,...,x_n)\) 的个数,使得 \(x_1 \ xor\ x_2\ xor\ ...\ xor\ x_n = k\),且 \(0 ...
- Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机
动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...
- Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
随机推荐
- iOS异常采用处理方式
iOS开发过程中我们经常会遇到异常问题 对异常的处理一般采用打印或者直接抛出.这样可以很方便我们调试过程有所参考,而且方便我们查看异常产生的位置信息 NSError(错误信息) 采用NSError的情 ...
- ELK学习004:Elasticsearch常规操作
CRUD 在我们的项目中有日志是一个必不可少的东西,但是日志的检索是一个很麻烦的事情,如每天一个日志,要找到问题就得一个一个找,并不能做到检索功能,这还算好的,如果是分布式的,每个机器都得找一遍,这种 ...
- Powershell无文件挖矿查杀方法
病毒现象 服务器出现卡顿.CPU飙升 和其他主机的445端口,建立起大量的连接 存在大量Powershell进程 病毒处置 封堵445端口; 或打永恒之蓝漏洞补丁(https://wukungt.gi ...
- netsh 查看自己的wifi密码。
查看自己曾经连接过得wifi netsh wlan show profiles 断开wifi netsh wlan disconnect 查看密码 netsh wlan show profile na ...
- Python——模块和包
一.概念 """模块():一个python文件,以 .py 结尾,包含python对象定义和语句.模块可以定义函数.类.变量,也可包含可执行文件 导入模块: 1.impo ...
- VMvare桥接网络连接不上解决办法
记一次学习中的突发状况.由于本人的pc时长要在不同的网络中进行切换,ip地址一般都是不固定的,所以我使用虚拟机的时候一般使用的都是让VMvare自动识别网络环境.直到今天遇到一种突发情况,VMvare ...
- 持续更新phpstorm h和pycharm 激活码
1.hosts文件写入 0.0.0.0 account.jetbrains.com0.0.0.0 www.jetbrains.com 2.激活码: AHD9079DKZ-eyJsaWNlbnNlSWQ ...
- mysql基于二进制文件的主从复制
1.设置主服务器配置 必须在主服务器上启用二进制日志,因为二进制日志是将更改从主服务器复制到从服务器的基础,如果未启用log-bin,则无法进行复制 复制组内的每个服务 ...
- c#Socket通信基本使用
基本流程 Server private void btnStart_Click(object sender, EventArgs e) { try { //当点击开始监听时在服务器端创建一个负责监视I ...
- UI设计的定义和view、viewgroup及其一些常用属性
1.uI设计 UI设计就是用户界面设计,比如QQ登录界面.聊天界面等,进行UI设计将会用到View和Viewgroup. 2.view 在安卓中可以理解为视图,在安卓中占用一块矩形区域,负责提供主件绘 ...