首页 > 其他分享 >AT_abc329_e [ABC329E] Stamp 题解

AT_abc329_e [ABC329E] Stamp 题解

时间:2023-11-24 19:46:28浏览次数:36  
标签:Stamp 题解 ABC329E long int 字符串 成立 dp define

题目翻译

给你两个字符串:\(S\) 由大写英文字母组成,长度为 \(N\);\(T\) 也由大写英文字母组成,长度为 \(M\),小于 \(N\)。有一个长度为 \(N\) 的字符串 \(X\),它只由 # 字符组成。请判断是否有可能通过执行以下任意次数的操作使 \(X\) 与 \(S\) 匹配:在 \(X\) 中选择 \(M\) 个连续字符,并用 \(T\) 替换它们。

分析

问题一:我们什么时候能够替换?

按照样例来解释:

7 3
ABCBABC
ABC

可以看出,样例是放了三个 \(T\)。

在考虑 \(S\) 的其他情况。如果 \(S\) 为 ABBC 那么就是不可以的,因为无法用两个 \(T\) 来组成,因为两个字符串都会失去前缀和后缀。

在自己列举几种后发现:

两个 \(T\),前者没有部分后缀或者后者没有部分前缀是可以相匹配的,但是呢,两个并存是不可以的。

问题二:怎么做呢?

我们可以使用 DP 的方式记录状态 \(dp_{i,j}\) 代表到第 \(i\) 个字符,此时位置是 \(T\) 中的下标几,然后表示能不能到达。

于是我们可以得到转移:当 \(dp_{i-1,j-1}\) 成立时,\(dp_{i,j}\) 和 \(dp_{i,1}\) 都成立,如果 \(dp_{i-1,m}\) 成立,那么对于所有的 \(j\),都有 \(dp_{i,j}\) 成立。

然后再判断一下两个字符串是否相等,如果不相等,把他换回不成立。

AC code:

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pii pair<int,int>
#define fir first
#define se second
#define endl '\n'
#define debug puts("AK IOI")
using namespace std;
const int N = 2e5+5;
int n,m;
string s,t;
bool dp[N][10];

int main(){
	cin >> n >> m;
	cin >> s >> t;
	s=' '+s;
	t=' '+t;
	if(s[1] == t[1])dp[1][1]=1;
	
	for(int i = 1;i <= n;i++){
		for(int j = 2;j <= m;j++)
			if(dp[i-1][j-1]) dp[i][j]=dp[i][1]=1;
		if(dp[i-1][m]) for(int j = 1;j <= m;j++)dp[i][j]=1;
		
		bool ac=0;
		for(int k = 1;k <= m;k++){
			if(t[k]==s[i] && dp[i][k]) ac=1;
			else if(dp[i][k]) dp[i][k] = 0;
		}if(ac==0){
			cout<<"No";	
			return 0;
		}
	}if(dp[n][m])cout<<"Yes";
	else cout<<"No";
	return 0;
}

标签:Stamp,题解,ABC329E,long,int,字符串,成立,dp,define
From: https://www.cnblogs.com/gsczl71/p/17854595.html

相关文章

  • 以精确反馈促进学生编程逻辑和问题解决意识:一种基于两层测试的在线编程训练方法
    (PromotingStudents’ProgrammingLogicandProblem-SolvingAwarenessWithPrecisionFeedback:ATwo-TierTest-BasedOnlineProgrammingTrainingApproach)DOI:10.1177/07356331221087773一、摘要研究目的:培养学生的计算机编程技能已成为全球重要的教育问题。然而,学......
  • 洛谷 P4872 OIer们的东方梦 题解
    前言一个下午,一个晚上,一个早上,可以算是一天了吧,终于调出了这道题,纪念一下吧!!!食用更佳。这道题其实就是一道简简单单的BFS模(du)板(liu)题。说难不难,简单不简单,虽然没有难的算法,但是就是码量一百多行,比较难调。题目难度绿,思维难度橙,代码难度蓝。真是个绝世好题。题目意思就是一......
  • 洛谷P3161 [CQOI2012] 模拟工厂题解
    P3161[CQOI2012]模拟工厂题解。题目其实发现这是一道状压,发现这道题是一道数学题,其实就很简单了。对于每一次的订单我们可以设:\(time\)为距离下一个订单的时间。\(num\)为这个订单要生产的数量。\(x\)为生产能力。\(y\)的时间可以用来提高工厂的生产力。那我们就可以得......
  • Ubuntu20.04 安装后部分问题解决方案
    安装搜狗输入法搜狗官方有教程:https://shurufa.sogou.com/linux/guideUbuntu与Windows时间不一致的问题安装ntpdate:sudoapt-getinstallntpdate校准时间:sudontpdatetime.windows.com将时间更新到硬件上:sudohwclock--localtime--systohc单击任务栏图标使窗......
  • [ARC117E] Zero-Sum Ranges 2题解
    题解前言个人认为官方题解写得最为详细、干净、清楚,如果有意向阅读外文版的题解的话,还是推荐去读一读:Editorial-AtCoderRegularContest117本文属于转载(?),有一些自己的思考过程,希望有帮助。题意有多少个长度为\(2N\)的序列\(A\)满足:序列\(A\)包含\(N\)个\(+1\)......
  • P9779_[HUSTFC 2023] 不定项选择题_题解
    #[rt](https://www.luogu.com.cn/problem/P9779)#题目#####有一道共n个选项的不定项选择题,它的答案至少包含一个选项,由于题目与选项的内容晦涩难懂,你打算通过尝试每一种可能的答案来通过这道题。#####初始时所有选项都没有被勾选,你可以执行任意次下述操作:-###勾选一个当前......
  • 【题解 P2839】 middle
    [国家集训队]middle题目描述一个长度为\(n\)的序列\(a\),设其排过序之后为\(b\),其中位数定义为\(b_{n/2}\),其中\(a,b\)从\(0\)开始标号,除法下取整。给你一个长度为\(n\)的序列\(s\)。回答\(Q\)个这样的询问:\(s\)的左端点在\([a,b]\)之间,右端点在\([c,d]\)......
  • CF1864D 题解
    我们注意到对如图倒三角形上的所有点操作都会影响到目标点。那么我们可以维护两个前缀和,第一个前缀和表示如下的点是否操作第二个前缀和表示这些点是否操作这样我们求出了前缀和之后,将两个前缀和异或一下就知道该点是否要操作了。#include<bits/stdc++.h>usingnamespace......
  • apache ftpserver服务器安装及服务启动问题解决
     在安装apacheftpserver后作为系统服务启动时遇到不能启动成功的问题,在网上各种搜索,发现很多人也遇到了同样的问题,折腾了1天,尝试了添加dll动态链接库、tomcat.exe替换ftpd.exe等还是没搞定。最后查看服务安装脚本service.bat,发现问题所在,现记录下过程中遇到的坑,分享出来参考,避......
  • Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)
    1、需求使用Vue+ElementUI实现在列表的操作栏新增一个复制按钮,复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面,本文实现为跳转到新增页面。2、实现1)列表页index.vue<el-table><!--其他列--><el-table-columnlabel="操作"width="150"><templateslot-s......