https://codeforces.com/contest/1194/problem/C
好像没什么好说的,要能构造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都当做失配复制了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已经匹配完了其实也是失配了。
#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, dt = 0;int sl = strlen(s);int st = strlen(t);for(; i < sl; i++) {while(j < st) {if(t[j] != s[i]) {d[dt++] = t[j];j++;if(j == st) {return false;}} else {j++;break;}}}if(i == sl) {while(j < st) {d[dt++] = t[j];j++;}sort(d, d + dt);sort(p, p + strlen(p));d[dt] = '\0';//cout << d << endl;//cout << p << endl;return true;} else {return false;}
}bool is_sub2(char *s, char *t) {int i = 0, j = 0;int sl = strlen(s);int st = strlen(t);for(; i < sl; i++) {while(j < st) {if(t[j] != s[i]) {j++;if(j == st) {return false;}} else {j++;break;}}}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");}}}
}