#define please return
#define AC 0
#include<iostream>
#include<string>
using namespace std;
int MAX = 0;
int n;
char first;
string str[25];
int s[25];
void dfs(string now, int length) {
MAX = max(MAX, length);
for(int i = 0; i < n; i++) {
if(s[i] < 2) { // 先判断使用少于2次
for(int j = now.size()-1; j >= ((now.size() >= str[i].size() ? now.size()-str[i].size() : 0) + 1); j--) {
// 从后往前找可以拼接的索引
int flag = 1; // 假设能拼接
for(int k = j; k <= now.size()-1; k++) {
// 对于每一位索引检测能否拼接
if(str[i][k-j] != now[j]) {
flag = 0;
break;
}
}
if(flag) {
s[i]++;
dfs(str[i], length + str[i].size()-now.size()+j);
s[i]--;
break;
}
}
}
}
}
int main() {
cin >> n;
for(int i = 0; i < n; i++) cin >> str[i];
cin >> first;
for(int i = 0; i < n; i++) {
if(str[i][0] == first) {
s[i]++;
dfs(str[i], str[i].size());
s[i]--;
}
}
cout << MAX;
please AC;
}
实际上没过样例qaq,但是眼睛都看瞎了还看不出来错哪了