远古代码,CCR似乎对了但这里爆蛋
查看原帖
远古代码,CCR似乎对了但这里爆蛋
555381
zlttcl楼主2022/10/15 10:15

RT

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,p[31],m,now;
int ans = -1;
string s[31],mb;
inline ll read() {
	ll x = 0, m = 1;
	char ch = getchar();
	while(!isdigit(ch)) {
		if(ch == '-') m = -1;
		ch = getchar();
	}
	while(isdigit(ch)) {
		x = x * 10 + ch - 48;
		ch = getchar();
	}
	return x * m;
}
inline void write(ll x) {
	if(x < 0) {
		putchar('-');
		write(-x);
		return;
	}
	if(x >= 10) write(x / 10);
	putchar(x % 10 + '0');
}
inline int solve(string mb,string xx) {
	int len = mb . size();
	for(int j = len - 1; j >= 0; -- j) {
		if(mb[j] != xx[0]) continue;
		int now = j;
		for(int k = 0; k < xx.size(); ++ k) {
			if(mb[now] == xx[k]) {
				++ now;
			} 
			else break;
		}
		if(now == len) return now - j;
	}
	return 0;
}
inline void dfs(int c,string mb) {
	int len = mb.size();
	ans = max(ans,len - c);
	for(int i = 1; i <= n; ++ i) {
		if(p[i] == 2) continue;
		int sum = 0;
		sum = solve(mb,s[i]);
		if(!sum) continue;
		++ p[i];
		dfs(c + sum,mb + s[i]);
		-- p[i];
	}
}
signed main() {
	n = read();
	for(int i = 1; i <= n; ++ i) getline(cin,s[i]);
	getline(cin,mb);
	dfs(0,mb);
	write(ans);
	return 0;
}
2022/10/15 10:15
加载中...