ccpc宠物对战

news/2024/7/23 17:09:08 标签: 宠物, 算法, c++

Problem - I - Codeforces

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+10;
const long long inf = 0x7f7f7f7f7f7f7f7f;
#define endl '\n'
typedef pair<int,int>pii;
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<s.size();i++){
			if(d[x][s[i]-'a']){//当前结点有的话就按照当前结点顺序走 
				x=d[x][s[i]-'a'];
				continue;
			}
			d[x][s[i]-'a']=++dex;//分配新的结点 
			x=d[x][s[i]-'a'];
		}
		cnt[x]++;
	}
}A,B;
int main(){
	int n,m;
	cin>>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"<<endl;
	else cout<<op<<endl;
}


http://www.niftyadmin.cn/n/5041756.html

相关文章

Linux实现HTTP服务器

在Linux系统中&#xff0c;我们可以利用HTTP服务器代理来实现网络请求的转发和加速&#xff0c;从而提高网站的访问速度和性能。本文将为您详细介绍如何搭建HTTP服务器代理&#xff0c;让您在网络世界中畅通无阻&#xff0c;更加快速高效地进行数据通信。 一、了解HTTP服务器代…

C#通过重写Panel改变边框颜色与宽度的方法

在C#中,Panel控件是一个容器控件,用于在窗体或用户控件中创建一个可用于容纳其他控件的面板。Panel提供了一种将相关控件组合在一起并进行布局的方式。以下是Panel控件的详细使用方法: 在窗体上放置 Panel 控件: 在 Visual Studio 的窗体设计器中,从工具箱中拖动并放置一…

Windows下conda安装pytorch GPU版

1.安装miniconda,不细讲了,自己去百度,miniconda自带python,可以通过conda创建虚拟python环境,安装Pytorch的话建议python版本大于3.8,完成后注意配置环境变量。 2.安装CUDA: 查看自己CUDA版本,Nvidia控制面板中找,不再赘述。根据查看的版本,下载 CUDA Toolkit并安装…

【数据链路层】网络基础 -- MAC帧协议与ARP协议

数据链路层认识以太网以太网帧格式(MAC帧)认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对于TCP协议的影响 再谈局域网转发原理&#xff08;基于协议&#xff09;ARP协议ARP协议的作用ARP协议的工作流程ARP数据报的格式 数据链路层 用于两…

【深度学习】实验12 使用PyTorch训练模型

文章目录 使用PyTorch训练模型1. 线性回归类2. 创建数据集3. 训练模型4. 测试模型 附&#xff1a;系列文章 使用PyTorch训练模型 PyTorch是一个基于Python的科学计算库&#xff0c;它是一个开源的机器学习框架&#xff0c;由Facebook公司于2016年开源。它提供了构建动态计算图…

LinuxShell命令行及脚本编程实例详解_笔记

LinuxShell命令行及脚本编程实例详解 Linux 典藏大师系列丛书 shell 脚本的构成: 1. shell 关键字 if ...then else; for ...done; while do done 2. shell 命令 export,echo,exit,pwd,return 3. linux 命令 data rm mkdir cd 4. 文本处理功能 awk cut sed grep 5. 函数 功…

算法|图论 4

LeetCode 827.最大人工岛 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述&#xff1a;给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返回执行此操作后&#xff0c;grid 中最大的岛屿面积是多…

ESLint+Prettier+VSCode编程规范

编程规范 ESLintPrettierESLint和Prettier配合解决代码格式化问题1. 在VSCode搜索Prettier插件安装2. 创建prettier配置文件3. 在VSCode中设置3.1 找到左下角设置图标&#xff0c;点击设置3.2 但是对VSCode 而言&#xff0c;默认一个 tab 等于 4 个空格&#xff0c;而 ESLint 希…