题目链接 琪亚娜世界第一可爱

这个题,题意非常的扭曲,就是给你一个字符串S,然后一位一位的给你三个字符串A B and C。问在给出一位后,A B C组成的序列是不是S的一个子序列(或者说是一个不连续的子串)。


记pos[i][j]为在字符串S中,位置i以后,第一次出现字符 j+‘a’ 的位置。
记dp[i][j][k]为第一个字符串A匹配到第i位,字符串B匹配到第j位,字符串C匹配到第k位。


#include <stdio.h>
#include <climits>
#include <cstring>
#include <time.h>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <utility>
#include <vector>
#include <string>#define INF 0x3f3f3f3f
#define ll long long
#define Pair pair<int,int>
#define re return#define getLen(name,index) name[index].size()
#define mem(a,b) memset(a,b,sizeof(a))
#define Make(a,b) make_pair(a,b)
#define Push(num) push_back(num)
#define rep(index,star,finish) for(register int index=star;index<finish;index++)
#define drep(index,finish,star) for(register int index=finish;index>=star;index--)
using namespace std;
const int maxn=1e5+5;int N,Q;
char store[maxn];
int len[3],star[3],finish[3];
char S[3][255];
int pos[maxn][26];
int dp[255][255][255];
int main(){ios::sync_with_stdio(false);cin.tie(NULL);cin>>N>>Q;cin>>store+1;for(register char c='a';c<='z';c++){int nowPos=1;while(store[nowPos]!=c && nowPos<=N)nowPos++;pos[0][c-'a']=nowPos;}rep(i,1,N+1){for(register char c='a';c<='z';c++){int index=c-'a';int last=pos[i-1][index];if(last>i){pos[i][index]=last;}else{int nowPos=i+1;while(store[nowPos]!=c && nowPos<=N)nowPos++;pos[i][index]=nowPos;}}}rep(i,0,26){pos[N+1][i]=N+1;}rep(i,0,3)len[i]=0;char op,add;int index;rep(daisiki,0,Q){cin>>op>>index;index--;switch(op){case '+':cin>>add;len[index]++;S[index][len[index]]=add;rep(i,0,3){star[i]=(i==index)? len[i]:0;}rep(i,star[0],len[0]+1){rep(j,star[1],len[1]+1)rep(k,star[2],len[2]+1){if(i+k+j) dp[i][j][k]=N+1;if(i) dp[i][j][k]=min(dp[i][j][k],pos[dp[i-1][j][k]][S[0][i]-'a']);if(j) dp[i][j][k]=min(dp[i][j][k],pos[dp[i][j-1][k]][S[1][j]-'a']);if(k) dp[i][j][k]=min(dp[i][j][k],pos[dp[i][j][k-1]][S[2][k]-'a']);}}break;case '-':len[index]--;break;}if(dp[len[0]][len[1]][len[2]]>N){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;}}re 0;
}

codeforces1149B. 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 ...

最新文章

  1. AI复原上海民国名媛影像!1929年的小姐姐,时装精致不输现在
  2. 《Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network》阅读笔记
  3. ipvsadm使用简介
  4. Windows无法更新的解决办法
  5. 【创业】创业团队的那些事(二)
  6. P7854-「EZEC-9」GCD Tree【构造】
  7. C++远航之封装篇——数据的封装
  8. windows 上的应用性能测试
  9. 微擎框架小程序 入口
  10. python使用HanLP命名实体识别(以识别人名为例)
  11. Spring Boot(18)---启动原理解析
  12. java求实数的整数部分和小数部分_输入一个浮点数,并输出该数的整数部分和小数部分...
  13. VB中对数据库进行增、删、改操作
  14. Hibernate validator 官网前言中文版
  15. 罗永浩,天下“老赖”不独你一人!6位创业明星的陨落
  16. week_07_数据库,JDBC,Utils,Html中文本,超链接,表格,表单,框架,图像标签
  17. python基础读后感_《Python基础教程读书笔记》
  18. 2020 DEMO CHINA创新中国春季峰会暨企业创新与企业创投峰会举行
  19. 基于stc51单片机的指纹解锁模块
  20. Python学习打卡【Task3】异常处理

热门文章

  1. python基础学习(一)
  2. unity 打开项目路径无效_怎么打开已有的unity工程文件?如何打开一个已有的unity3d游戏工程啊?...
  3. 商场触摸互动广告机有哪些功能
  4. Li‘s 核磁共振影像数据处理-19-FSL界面可视化操作介绍
  5. 反编译exe软件_Winnti组织:利用ShadowPad和Winnti恶意软件针对高校发动攻击
  6. 42条微信营销小技巧!
  7. 全屋智能抢占“中控”,华为、海尔、小米们谁离用户最近?
  8. 大学计算机案例教程旧照片修复,破损旧照片修复教程
  9. CAD中角度如何平分、CAD特性匹配的作用是什么?
  10. springboot实战—BMI体脂计算器-服务器端