Link:

BZOJ 4060 传送门

Solution:

可以发现字符串间的关系可以构成一棵树

于是我们先用字符串哈希建树,再树形$dp$即可

设$dp[i][j]$为第$i$个节点从$P$字符串的第$j$为开始匹配的失配位置

则有$dp[i][j]=dp[ch[i][1]][dp[ch[i][0]][j]]$

在叶子节点时暴力匹配就行了,复杂度$O(k*P)$

Code:

#include <bits/stdc++.h>

using namespace std;

const int MAXN=,ML=;
int T,n,hs[MAXN],dp[MAXN][ML],ch[MAXN][],root;
char S[ML],P[ML],dat[MAXN][ML],tmp[ML],a[ML]; inline int hash(char t[])
{
int ret=;
for(int i=;i<;i++)
ret=ret*+((i<strlen(t))?(t[i]-'A'+):);
return ret;
} int dfs(int x,int y)
{
if(dp[x][y]!=-) return dp[x][y];
if(ch[x][]) return dp[x][y]=dfs(ch[x][],dfs(ch[x][],y));
int k=y;
for(int cur=;k<strlen(P) && cur<strlen(dat[x]);cur++)
if(dat[x][cur]==P[k]) k++;
return dp[x][y]=k;
} int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);memset(dp,-,sizeof(dp));
for(int i=;i<=n;i++)
{
scanf("%s%s%s",a,tmp,dat[i]);hs[i]=hash(a);
if(dat[i][]>='a' && dat[i][]<='z') ch[i][]=ch[i][]=;
else
{
ch[i][]=hash(dat[i]);
scanf("%s%s",tmp,dat[i]);
ch[i][]=hash(dat[i]);
}
} for(int i=;i<=n;i++) if(ch[i][])
for(int j=;j<;j++) for(int k=;k<=n;k++)
if(ch[i][j]==hs[k]) ch[i][j]=k;
scanf("%s%s",S,P);
for(int i=;i<=n;i++) if(hs[i]==hash(S)) root=i; printf((dfs(root,)<strlen(P))?"NO\n":"YES\n");
}
return ;
}

Review:

如要对字符数组大量比较+判等于,最好使用字符串$Hash$ (采用27进制)

如果不考虑$string$输入效率较低,则对$string$用$map$或$hash\_ map$更优

[BZOJ 4060] Word Equations的更多相关文章

  1. BZOJ4060 : [Cerc2012]Word equations

    首先通过hash建树 设f[i][j]表示第i个特殊符号从P的第j位开始匹配能到达哪里 记忆化搜索,对于底层贪心匹配. #include<cstdio> #include<cstri ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. 要back的题目 先立一个flag

    要back的题目 目标是全绿!back一题删一题! acmm7 1003 1004 acmm8 1003 1004 sysu20181013 Stat Origin Title Solved A Gy ...

  4. BZOJ 1622: [Usaco2008 Open]Word Power 名字的能量

    题目 1622: [Usaco2008 Open]Word Power 名字的能量 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 349  Solved ...

  5. 【BZOJ】1622: [Usaco2008 Open]Word Power 名字的能量(dp/-模拟)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1622 这题我搜的题解是dp,我也觉得是dp,但是好像比模拟慢啊!!!! 1400ms不科学! 设f[ ...

  6. BZOJ——1622: [Usaco2008 Open]Word Power 名字的能量

    http://www.lydsy.com/JudgeOnline/problem.php?id=1622 Description     约翰想要计算他那N(1≤N≤1000)只奶牛的名字的能量.每只 ...

  7. bzoj 1622: [Usaco2008 Open]Word Power 名字的能量【模拟】

    模拟即可,注意包含可以是不连续的 方便起见读入的时候全转成小写 #include<iostream> #include<cstdio> using namespace std; ...

  8. 怎样将word文件转化为Latex文件:word-to-latex-2.56具体解释

    首先推荐大家读一读这篇博文:http://blog.csdn.net/ibingow/article/details/8613556 --------------------------------- ...

  9. [BZOJ]1071 组队(SCOI2007)

    一道比较NB的套路题. Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为mi ...

随机推荐

  1. 理解[].forEach.call()

    例子: let cols = document.querySelectorAll('ul li') [].forEach.call(cols, function (col, index) { // T ...

  2. 论文笔记《Spatial Memory for Context Reasoning in Object Detection》

    好久不写论文笔记了,不是没看,而是很少看到好的或者说值得记的了,今天被xinlei这篇paper炸了出来,这篇被据老大说xinlei自称idea of the year,所以看的时候还是很认真的,然后 ...

  3. 湖南大学第十四届ACM程序设计新生杯 Dandan's lunch

    Dandan's lunch Description: As everyone knows, there are now n people participating in the competiti ...

  4. rest与restful

      知乎上面摘抄的,感觉不错,分享下:  https://www.zhihu.com/question/28557115 1. REST描述的是在网络中client和server的一种交互形式:RES ...

  5. 用静态工厂的方法实例化bean

    //代码如下: package com.timo.domain; public class ClientService { //use static factory method create bea ...

  6. ext4文件系统由文件的inode号定位其inode Table

    在ubuntu中(以16.06为例),stat filename 可以查看文件的inode数值,但是如何确定该inode项具体在哪个块组下的inode Table中不是那么容易,接下来通过一步步计算来 ...

  7. 百度vue服务端渲染(ssr)有感

    前端各种框架工具层次不穷,日新月异,越学越混乱了快 知乎上看到了一段回复,豁然开朗的感觉. Web 2.0时代最大的思想革命本质不是前后端分离,而是把网页当作独立的应用程序(app).前后端分离只是实 ...

  8. bzoj 1096 斜率优化DP

    首先比较容易的看出来是DP,w[i]为前i个工厂的最小费用,那么w[i]=min(w[j-1]+cost(j,i))+c[i],但是这样是不work的,复杂度上明显过不去,这样我们考虑优化DP. 设A ...

  9. C# 文件类的操作---获取

    如何获取指定目录包含的文件和子目录 . DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找: . DirectoryIn ...

  10. jquery hover事件中 fadeIn和fadeOut 效果不能及时停止

    $(".nav ul li").hover(function () { var id = $(this).attr("id"); $(".nav dl ...