32pts球调
查看原帖
32pts球调
1164775
Jadonyzx楼主2024/6/2 11:55
#include<bits/stdc++.h>
#define maxl 200010
#define maxn 210
using namespace std;
char ss[maxl];
int cnt,LEN;
bool dp[maxl];
struct node{
	string s;
	int len;
}fft[maxn];
bool cmp(node CCF,node IOI){
	return CCF.len<IOI.len;
}
int res,lenstart[50];
bool havelen[50];
signed main(){
	//freopen("P1470_3.in","r",stdin);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	while(1){
		cin>>(fft[++cnt].s);
		fft[cnt].len=(fft[cnt].s.size());
		if(fft[cnt].s==".")break;
	}
	cin>>(ss+1);LEN=strlen(ss+1);
	sort(fft+1,fft+1+cnt,cmp);fft[0].len=0;
	for(int i=1;i<=cnt;++i)havelen[fft[i].len]=1;
	for(int i=1;i<=cnt;++i){if(fft[i].len!=fft[i-1].len){lenstart[fft[i].len]=i;}}
	dp[0]=1;
	for(int i=1;i<=LEN;++i){
		if(dp[i])continue;
		for(int j=0;j<=i-1;++j){
			if(!dp[j])continue;
			if(!havelen[i-j])continue;
			for(int k=lenstart[i-j];1;k++){
				if(fft[k].len!=i-j)break;
				bool f=1;
				for(int q=1;q<=i-j;++q){if(fft[k].s[q-1]!=ss[j+1+q-1]){f=0;break;}}
				if(f){dp[i]=1;break;}
			}
			if(dp[i])break;
		}
	}
	for(int i=LEN;i>=0;--i){if(dp[i]){cout<<i;return 0;}}
	return 0;
}
2024/6/2 11:55
加载中...