求助大佬 :dfs 三对两错一超时,不知道怎末改了
查看原帖
求助大佬 :dfs 三对两错一超时,不知道怎末改了
870436
gxtisincsu楼主2024/10/30 19:40

如题,这个测试结果3对2错1超时,不知道怎末改了。

#include <iostream>
#include <cmath>
using namespace std;

int loongSize = 0;
void dfs(int deepth,string nowLoong,int *v,string *s,int n,char head){
    int num = 0;
    // for(int i=0;i<n;i++)
    //     cout<<v[i]<<" ";
    // cout<<endl;
    for(int i=0;i<n;i++){
        if(v[i]!=2)
            break; 
        num++;
    }
    if(num==n){
        loongSize = max(loongSize,static_cast<int>(nowLoong.length()));
        //cout<<loongSize<<endl;
    }
    if(deepth==0){
        for(int i=0;i<n;i++)
            if(s[i][0]==head){
                v[i]++;
                nowLoong = s[i];
                //cout<<nowLoong<<endl;
                dfs(deepth+1,nowLoong,v,s,n,head);
                v[i]--;
            }
    }
    else for(int i=0;i<n;i++){
        if(v[i]==0||v[i]==1){
             v[i]++;
             int overSize = 0;
             for(int j=1;j<min(nowLoong.length(),s[i].length());++j)
                if(nowLoong.substr(nowLoong.length()-j)==s[i].substr(0,j))
                    overSize = j;
             string o_nowLoong = nowLoong;
             if(overSize>0)
                nowLoong = nowLoong+s[i].substr(overSize);
             //cout<<nowLoong<<" "<<s[i]<<" "<<v[i]<<endl;
             dfs(deepth+1,nowLoong,v,s,n,head);
             nowLoong = o_nowLoong;
             v[i]--;
        }
    }
}

int main(){
    int n,deepth=0;
    cin>>n;
    string *s = new string[n];
    char head;
    int *v = new int[n];
    for(int i=0;i<n;i++){
        cin>>s[i];
        v[i] = 0;
    }
    cin>>head;
    dfs(deepth,s[0],v,s,n,head);
    cout<<loongSize;
    return 0;
}
2024/10/30 19:40
加载中...