思路

dp[i][j][k]表示的是对于第一个,第二个,第三个字符串,分别匹配到i,j,k个字符的时候,在s上的最小长度是多少,如果在某一个子串里添加了一个字符,我们只要跟新一下dp[i+1][j][k]就可以了,如果删除了一个子串的字符我们就不用做处理,只要判断一下dp[i-1][]j[k]是否可以就行了,最后的答案和n去对比,dp[i][j][k]<=n,就输出yes,
我们还要预处理出来一个数组,ne[i][j],表示在s的第i个字符后,第一个j这个字符的位置在哪里,在更新dp的时候使用,具体看代码.

代码(主要借鉴博客)

#include<bits/stdc++.h>
using namespace std;
int n,q,len[5],dp[255][255][255],nxt[100005][30];
char s[100005],t[5],d[5][255];
int main(){scanf("%d%d%s",&n,&q,s+1);for(int i=0;i<26;i++)nxt[n][i]=nxt[n+1][i]=n+1;//因为dp的值最大就是n+1所以只要跟新到n+1就可以了for(int i=n-1;i>=0;i--){for(int j=0;j<26;j++){//先将每个i后面的j字符的位置初始化为i+1的时候j字符的位置nxt[i][j]=nxt[i+1][j];}nxt[i][s[i+1]-'a']=i+1;//在更新一下s[i+1]时候对第i位置上s[i+1]字符的值就可以了}for(int x,i=1;i<=q;i++){scanf("%s%d",t,&x);if(*t=='-'){len[x]--;}else{len[x]++;//更新一下对应的子串长度scanf("%s",t);d[x][len[x]]=*t;for(int p1=x==1?len[x]:0;p1<=len[1];p1++){for(int p2=x==2?len[x]:0;p2<=len[2];p2++){for(int p3=x==3?len[x]:0;p3<=len[3];p3++){dp[p1][p2][p3]=n+1;//初始化为n+1就可以输出N0了if(p1)dp[p1][p2][p3]=min(dp[p1][p2][p3],nxt[dp[p1-1][p2][p3]][d[1][p1]-'a']);//对应的dp更新if(p2)dp[p1][p2][p3]=min(dp[p1][p2][p3],nxt[dp[p1][p2-1][p3]][d[2][p2]-'a']);if(p3)dp[p1][p2][p3]=min(dp[p1][p2][p3],nxt[dp[p1][p2][p3-1]][d[3][p3]-'a']);}}}}puts(dp[len[1]][len[2]][len[3]]<=n?"YES":"NO");//如果长度大于了n就不行}return 0;
}

D. Three Religions相关推荐

  1. *【CodeForces - 1150D】Three Religions(dp,预处理,思维)

    题干: During the archaeological research in the Middle East you found the traces of three ancient reli ...

  2. Ubiquitous Religions (并查集)

    Ubiquitous Religions POJ - 2524 当今世界有许多不同的宗教,很难跟踪它们.你有兴趣找出你大学里有多少不同的宗教学生相信. 你知道你的大学里有 n 学生 (0 < n ...

  3. 【并查集】POJ 2524 Ubiquitous Religions

    POJ 2524 Ubiquitous Religions 就是看集合的数量是多少,将所有节点的祖先结点放进set,输出size就行了 #include <iostream> #inclu ...

  4. POJ-2524 Ubiquitous Religions(无处不在的宗教)解题报告(并查集)

    目录 题目描述 思路分析 今天没有考试,那就再刷点题吧(难道就不怕c语言挂科吗?).因为昨天写了道并查集,所以今天再来一道,还是有所收获的. 题目描述 题目:https://vjudge.net/pr ...

  5. poj 2524 Ubiquitous Religions (简单并查集)

    题目链接:http://poj.org/problem?id=2524 There are so many different religions in the world today that it ...

  6. POJ-2524-Ubiquitous Religions

    这题是并查集,然后没有什么弯弯绕. #include <cstdio> const int maxn=50005; int pre[maxn];int find(int x) {if (p ...

  7. poj 2524 Ubiquitous Religions (并查集)

    题目:http://poj.org/problem?id=2524 题意:问一个大学里学生的宗教,通过问一个学生可以知道另一个学生是不是跟他信仰同样的宗教.问学校里最多可能有多少个宗教. 也就是给定一 ...

  8. pku2524-----Ubiquitous Religions(初次接触并查集)

    方法一:time limited:对于合并操作要搜遍全部元素 Code //并查集 //方法一:用集合中最小元素标记集合. //对于合并操作要搜遍全部元素. #include<stdio.h&g ...

  9. POJ2524——宗教(Ubiquitous Religions)【图论,并查集】

    正题 题目链接: http://poj.org/problem?id=2524 大意 有n个学生,告诉你哪两个学生的宗教相等,求校园里有多少个宗教. 解题思路 并查集链接就好了 代码 #include ...

  10. codeforces1149B. Three Religions

    题目链接 琪亚娜世界第一可爱 这个题,题意非常的扭曲,就是给你一个字符串S,然后一位一位的给你三个字符串A B and C.问在给出一位后,A B C组成的序列是不是S的一个子序列(或者说是一个不连续 ...

最新文章

  1. Java Review - 线程池资源一直不被释放案例源码分析
  2. gets函数会读取回车吗_会做二次函数吗?用6种方法教你做二次函数(初中生不要错过)...
  3. 未来已来?揭开量子计算机的神秘面纱
  4. HDU2109 Fighting for HDU【排序】
  5. Mark:SQL Server关于CAST和CONVERT的区别和用法
  6. 小米发布会之文案错误:大哥你先处罚自己!再处罚相关高管!
  7. 学习笔记:GoogLeNet
  8. 简单的整人代码(你是猪,文章末附带文件)
  9. 服务器被攻击ip显示国外,服务器被不同的IP攻击怎么破?
  10. 导入项目运行报错:Error starting ApplicationContext. To display the conditions report re-run your application
  11. 电子商务法律法规【1】
  12. 中科院ICTCLAS分词汉语词性标记集
  13. oracle实现aes解密_AES加解密程序的实现
  14. php收付同分账,php微信分账功能 —— app支付
  15. 华为路由器6to4隧道原理及配置
  16. python漫画爬虫:我不做人了,b站!爬取辉夜大小姐等漫画
  17. Java后端社招面试个人总结
  18. 京东员工出版的计算机书籍,【京东工资】业务员待遇-看准网
  19. LU分解完成利用节点电压法的简易电路求解程序(一)
  20. 金九银十面试整理:BAT大厂最爱问的Android核心面试百题详细解析!

热门文章

  1. 内存颗粒位宽和容量_【存储器】浅谈SDRAM内存芯片位宽
  2. 深度学习在美团搜索广告排序的应用实践
  3. android模拟器报错dev kvm is not found
  4. android data com.qzone,我手机是安卓系统的,Qzone里的FileCache文件夹中的文件是什么东西?...
  5. php agrs zf2,添加ZF2_PATH environment variable 环境变量
  6. sleuth zipkin reporter-sender 分析
  7. microsoftstore连不上网_修复Microsoft Store 无法连接网络 代码: 0x80072EFD
  8. GDT中的轮廓度标注
  9. NLP之分词技术理论
  10. php盘古分词,百度分词技术_百度输入法分词怎么关_百度分词原理