最后一点WA求助
查看原帖
最后一点WA求助
358521
呕你叽娃楼主2023/11/6 17:16

预处理:建立数组判断两个字母的组合的相对位置是否冲突 但不知道为什么最后一个点不过,“jo”这个组合不知道为什么标记成了冲突。。。

#include <bits/stdc++.h>
using namespace std;

string s, t;
int Q, vis[26], f[1000];

int main(){
    #ifndef ONLINE_JUDGE
        freopen("123.in","r",stdin);
        freopen("123.out","w",stdout);
    #endif

    cin >> s >> t;

    int a = s.length(), b = t.length();
    for(int i = 0; i < 18; i++){
        for(int j = i; j < 18; j++){
            int scnt = 0, tcnt = 0, sflag = 1, tflag = 1;
            while(true){
                while((s[scnt] - 'a') != i && (s[scnt] - 'a') != j && sflag) {
                    scnt ++;
                    if(scnt >= a){
                        sflag = 0;
                        break;
                    }
                }
                while((t[tcnt] - 'a') != i && (t[tcnt] - 'a') != j && tflag) {
                    tcnt ++;
                    if(tcnt >= a){
                        tflag = 0;
                        break;
                    }
                }
                if(tflag + sflag == 2){
                    if(s[scnt] == t[tcnt]) {
                        scnt ++;
                        tcnt ++;
                        continue;
                    }
                    else {
                        f[i * 26 + j] = 1;
                        break;
                    }
                }
                else{
                    if(tflag + sflag == 0) break;
                    else {
                        f[i * 26 + j] = 1;
                        break;
                    }
                }
            }
        }
    }

    cin >> Q;
    string p;
    while(Q--){
        cin >> p;

        int flag = 0;
        for(int i = 0; i < p.length(); i++){
            for(int j = i; j < p.length(); j++){
                if(f[(p[i] - 'a')*26 + (p[j] - 'a')]) flag = 1;
            }
        }
        if(flag) cout << 'N';
        else cout << 'Y';
    }
}```
2023/11/6 17:16
加载中...