debug

· · 个人记录

1.

#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e5+10;
int t;
int n;
string s[11];
string str;
bool f;
pair<int,int> v[MAXN];
bool inc[MAXN];
int cnt;
bool cmp(pair<int,int> a,pair<int,int> b){
    return a.second<b.second;
}
int main(){
//  freopen("input.in","r",stdin);
//  freopen("user_output.out","w",stdout);
    freopen("c.in","r",stdin);
    freopen("c.out","w",stdout);
    cin>>t;
    for(int i=1;i<=t;++i){
        memset(inc,0,sizeof(inc));
        cnt=0;
        memset(v,0,sizeof(v));
        cin>>n;
        for(int j=1;j<=n;++j){
            cin>>s[j];
        }
        cin>>str;
        for(int j=0;j<str.size();++j){
            for(int k=1;k<=n;++k){
                f=true;
                for(int l=0;l<s[k].size();++l){
                    if(str[j+l]!=s[k][l]){
                        f=false;
                        break;
                    }
                }
                if(f){
                    v[++cnt].first=j;
                    v[cnt].second=s[k].size()+j-1;
//                  cout<<s[k]<<' '<<v[cnt].first<<' '<<v[cnt].second<<'\n';
                }
            }
        }
//      cout<<'\n'<<"-----------"<<'\n';
        sort(v+1,v+cnt+1,cmp);
        for(int j=1;j<=cnt;++j){
            if(j+1<=cnt){
                if(v[j+1].first<=v[j].first){
                    for(int k=j;k<=n;++k){
                        swap(v[k+1],v[k+2]);
                    }
                    --cnt;
                }
            }
//          cout<<v[i].first<<' '<<v[i].second<<'\n';
        }
        for(int j=1;j<=cnt;++j){
            str[v[j].second]='*';
            f=true;
            for(int k=1;k<=cnt;++k){
                if((v[k].first<=v[j].second&&v[k].second>=v[j].second)||inc[k]){
                    inc[k]=true;
                }else{
                    f=false;
                }
            }
            if(f){
                cout<<str<<'\n';
                break;
            }
        }
    }
    return 0;
}