50分求助,错在哪?
查看原帖
50分求助,错在哪?
1380473
ZY_202301005129楼主2024/7/10 10:06
#include <iostream>
#include<algorithm>
using namespace std;
string a[21];
int n;
char oj;
string dargon;
int a1[21];//记录是否被占用
int leng[21];//记录贡献长度
int sum;//记录当前总长度
int max1;//记录最大值
void add(int x)
{
	for (int i = 1;i <= n;i++)
	{
		if (a1[i] <2)
		{
			int s = 0;
			for (int j = 1;j <= min(a[i].size(), a[x].size());j++)
			{
				string x1 = a[i].substr(0,j);
				string x2 = a[x].substr(a[x].size() - j, j);
				if (x1 == x2)
				{
					s=j;
				}
				
			}
			if (s != 0)
			{
				a1[i] ++;//已被占用
				int leng1 = a[i].size() - s;
				dargon += a[i].substr(s, leng1);//将后续字串加入到大字符串中
				leng[i] += leng1;//记录当前串的贡献值
				sum += leng1;
				max1 = max(max1, sum);
				add(i);//进入下一个字符串的查找
				a1[i] --;//取消占用
				sum -= leng1;
				leng[i] -= leng1;//去除长度贡献
				while (leng1--)
					dargon.pop_back();//去除尾部字串
			}
		}
	}
}
int main()
{
	cin >> n;
	for (int i = 1;i <= n;i++)
		cin >> a[i];
	cin >> oj;
	for (int i = 1;i <= n;i++)
		if(a[i].front()==oj)
	    {
		a1[i] ++;
		dargon = a[i];
		leng[i] = a[i].size();
		sum += a[i].size();
		add(i);
		a1[i] --;
		dargon.clear();
		leng[i] = 0;
		sum -= a[i].size();
	    }
	cout << max1;
}
2024/7/10 10:06
加载中...