求助,为什么连样例都过不去
查看原帖
求助,为什么连样例都过不去
759274
Stevehim楼主2022/12/1 07:38

RT

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#define maxn 30
using namespace std;
int y[maxn][maxn];
int visit[maxn];
int a[maxn];
int n;
int ans = 0;
int ma = 0;

void work(int a, int b, string s1, string s2) {
	cout << s1 << ' ' << s2 << endl;
	int len1 = s1.length();
	int len2 = s2.length();
	int ma1 = 0;
	if (s1.find(s2) != string::npos) {
		y[a][b] = 0;
		return;
	}
	for (int i = 0; i < len2; i++) {
		string temp;
		for (int j = 0; j <= i; j++) {
			temp += s2[j];
		}

//		int index = s1.find(temp);
//		cout << index << endl;
//		cout << s1.find(temp) << endl;
//		cout << len1 - s1.find(temp) << endl;
		if (s1.find_last_of(temp) != string::npos && (len1 - s1.find_last_of(temp) == temp.length())) { //在后缀
			ma1 = temp.length();
			cout << "temp=" << temp << " string=" << s1 << ' ' << len1 - s1.find(temp) <<  endl;
//			cout << "ok" << ' ';
		}
	}
//	cout << endl;
	y[a][b] = ma1;
	cout << "ma=" << ma1 << endl;
	return;
}

void dfs(int x) {
	bool ifOk = false;
	for (int i = 0; i < n; i++) {
		if (visit[i] > 2) {
			continue;
		}
		if (y[x][i] == 0) {
			continue;
		}
		ans += a[x];
		ans -= y[x][i];
		ifOk = true;
		visit[i]++;
		dfs(i);
		ans -= a[x];
		ans += y[x][i];
		visit[i]--;
	}
	if (!ifOk) {
		ma = max(ans, ma);
	}
	return;
}
string s_list[maxn];
string temp;
char ch;

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> s_list[i];
		a[i] = s_list[i].length();
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			work(i, j, s_list[i], s_list[j]);
		}
	}
	for (int i = 0; i < n; i++) {
		if (s_list[i][0] == ch) {
			visit[i]++;
			ans = a[i];
			dfs(i);
			visit[i] = 0;
		}
	}
	cout << ma;
	return 0;
}

2022/12/1 07:38
加载中...