ccpc宠物对战

Problem - I - Codeforces

#include 
using namespace std;
typedef long long ll;
const int N=5e5+10;
const long long inf = 0x7f7f7f7f7f7f7f7f;
#define endl '\n'
typedef pairpii;
int dp[N][3];
struct node{//字典树 
	int dex=0;
	int d[N][30];
	int cnt[N];
	void insert(string s){
		int x=0;
		for(int i=0;i>n;
	string a,b;
	for(int i=1;i<=n;i++){
		cin>>a;
		A.insert(a);
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>b;
		B.insert(b);
	}
	string c;
	cin>>c;
	c=' '+c;
//	for(int i=0;i<=c.size();i++)dp[i][0]=dp[i][1]=inf;
memset(dp,0x3f,sizeof(dp));
	dp[0][1]=0;
	dp[0][0]=0;
	for(int i=1;i<=c.size();i++){
		int x=0;
		for(int j=i;j<=c.size();j++){
			if(A.d[x][c[j]-'a']){
				x=A.d[x][c[j]-'a'];
			}
			else break;
			if(A.cnt[x])dp[j][0]=min(dp[j][0],dp[i-1][1]+1);//由结果倒推 
		}
		x=0;
		for(int j=i;j<=c.size();j++){
			if(B.d[x][c[j]-'a']){
				x=B.d[x][c[j]-'a'];
			}
			else break;
			if(B.cnt[x])dp[j][1]=min(dp[j][1],dp[i-1][0]+1);
		}
	}
	ll op=min(dp[c.size()-1][0],dp[c.size()-1][1]);
	if(op>=1e9)cout<<"-1"<

你可能感兴趣的:(宠物,算法,c++)