zoukankan      html  css  js  c++  java
  • Codeforces

    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] = '';
            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 Yinku
        freopen("Yinku.in", "r", stdin);
        //freopen("Yinku.out", "w", stdout);
    #endif // Yinku
        while(~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] = '';
            //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 Yinku
        freopen("Yinku.in", "r", stdin);
        //freopen("Yinku.out", "w", stdout);
    #endif // Yinku
        while(~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");
                }
            }
        }
    }
    
    
  • 相关阅读:
    python爬取动态网页数据,详解
    几行代码轻松搞定python的sqlite3的存取
    14、Iterator跟ListIterator的区别
    13、Java菜单条、菜单、菜单项
    12、借助Jacob实现Java打印报表(Excel、Word)
    11、借助POI实现Java生成并打印excel报表(2)
    10、借助POI实现Java生成并打印excel报表(1)
    9、JcomboBox下拉框事件监听
    8、单选按钮(JRadioButton)和复选框(JCheckBox)
    java swing 添加 jcheckbox复选框
  • 原文地址:https://www.cnblogs.com/Yinku/p/11186616.html
Copyright © 2011-2022 走看看