50分求助!!
查看原帖
50分求助!!
580804
Deepppp楼主2025/8/4 01:05
#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,但是眼睛都看瞎了还看不出来错哪了

2025/8/4 01:05
加载中...