51ptswa前三个点求条
查看原帖
51ptswa前三个点求条
924357
gol_sky楼主2025/8/29 02:54

code:

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

int n, ans = 0; 
string w[25];   
int v[25];   

void dfs(string s,int cnt){
    //答案取最大值 
    if(s.size() > ans) {
        ans = s.size();
    }

    for(int i = 1; i <= n; i++) {
        if(v[i] >= 2) continue;
        
        //重叠部分
        int ov = 0; 
        int mx = min(s.size(), w[i].size()); 
        for(int k = 1; k <= mx; k++) {
            if(s.substr(s.size()-k) == w[i].substr(0, k)) {
                ov = k;
            }
        }
        
        if(ov == 0) continue;

        if(ov == s.size() || ov == w[i].size()) continue;
        
        v[i]++;
        string ns = s + w[i].substr(ov);
        dfs(ns, cnt + 1);
        v[i]--;
    }
}

int main() {
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> w[i];
    }
    
    char st; 
    cin >> st;
    
    memset(v, 0, sizeof(v));
    
    for(int i = 1; i <= n; i++) {
        if(w[i][0] == st) {
            v[i]++;
            dfs(w[i], 1);
            v[i]--;
        }
    }
    
    cout << ans;
    return 0;
}

2025/8/29 02:54
加载中...