模拟 hdu5414 CRB and String

阅读: 评论:0

模拟 hdu5414 CRB and String

模拟 hdu5414 CRB and String

传送门:点击打开链接

题意:定义一次操作。能够在随意一个字符a后面插入一个不等于a字符的随意字符。问能否将s串变成t串

思路:感觉这样的构造和模拟的题目做少了Orz

首先我们能够发现。假设是开头。第一个字符必需要一样,设第一个字符为f

那么前面连续的假设两个都等于f,就把指针都后移。直到两个中的某一个指针到末了。或者两者不再相等。才跳出循环

然后推断是否是指针到末端了,对于i和j到末端的推断不一样,须要细致推断一下。

然后假设两者如今不相等,也不能有B[j] == f.由于B[j]是无法在f后面插入的,由于两者一样


然后最终把特殊情况所有考虑完了~

处理到这里后。后面的部分全然能够觉得是能够插入在随意一个字符a后面插入随意一个字符包含字符a,由于在插入位置的前面绝对会存在不是a字符的。仅仅要在那里插入a字符就能够达到效果并满足题意。所以后面的部分就非常好模拟了

#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define FIN freopen(&#","r",stdin)
#define FOUT freopen(&#","w+",stdout)using namespace std;
typedef long long LL;
typedef pair<int, int> PII;const int MX = 1e5 + 5;char A[MX], B[MX];bool solve(char *A, char *B) {if(A[0] != B[0]) return false;int f = A[0];int m = strlen(A), n = strlen(B), i = 1, j = 1;while(i < m && j < n && A[i] == B[j] && A[i] == f) i++, j++;if(j == n) return i == m;if(i == m) return B[j] != f;if(B[j] == f) return false;while(true) {if(i == m) return true;if(j == n) return false;if(A[i] == B[j]) i++, j++;else j++;}
}int main() {int T;//FIN;scanf("%d", &T);while(T--) {scanf("%s%s", A, B);printf("%sn", solve(A, B) ? "Yes" : "No");}
}


转载于:.html

本文发布于:2024-01-30 18:12:26,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170660954721886.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:CRB   String
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23