Codeforces - 1194C - From S To T - 子序列 - 排序
生活随笔
收集整理的這篇文章主要介紹了
Codeforces - 1194C - From S To T - 子序列 - 排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
https://codeforces.com/contest/1194/problem/C
好像沒什么好說的,要能構(gòu)造s必須是t的子序列,并且相差的字符集合d是p的子集。
用雙指針法求兩遍子序列就可以了,甚至不需要sort,假如用桶排的話就是O(qn)的。
下面這個錯在哪里呢?
正確的:
#include<bits/stdc++.h> using namespace std; typedef long long ll;int n; char s[105]; char t[105]; char p[105]; char d[105];bool is_sub1(char *s, char *t) {int i = 0, j = 0, dl = 0;int sl = strlen(s);int tl = strlen(t);while(i < sl && j < tl) {if(s[i] == t[j]) {i++;j++;} else {d[dl++] = t[j];j++;}}if(i == sl) {//s完全是t的子序列while(j < tl) {//把剩下的t都當做失配復(fù)制了d[dl++] = t[j];j++;}d[dl] = '\0';sort(d, d + dl);sort(p, p + strlen(p));return true;} else {return false;} }bool is_sub2(char *s, char *t) {int i = 0, j = 0;int sl = strlen(s);int tl = strlen(t);while(i < sl && j < tl) {if(s[i] == t[j]) {i++;j++;} else {j++;}}if(i == sl) {return true;} else {return false;} }int main() { #ifdef Yinkufreopen("Yinku.in", "r", stdin);//freopen("Yinku.out", "w", stdout); #endif // Yinkuwhile(~scanf("%d", &n)) {while(n--) {scanf("%s%s%s", s, t, p);if(is_sub1(s, t) && is_sub2(d, p)) {puts("YES");} else {puts("NO");}}} }WA2的:
沒有保證所有的i一定匹配,要是全部的j已經(jīng)匹配完了其實也是失配了。
轉(zhuǎn)載于:https://www.cnblogs.com/Yinku/p/11186616.html
總結(jié)
以上是生活随笔為你收集整理的Codeforces - 1194C - From S To T - 子序列 - 排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 敏捷项目管理之计划扑克游戏
- 下一篇: 从云流水账~