首页 > 其他分享 >Codeforces Round 764 (Div. 3) -- E. Masha-forgetful

Codeforces Round 764 (Div. 3) -- E. Masha-forgetful

时间:2023-04-16 22:48:19浏览次数:41  
标签:Masha idx -- s1 cout Codeforces int string

**
题目大意:取去模板串中的子串可以组成一个给定的目标串,每个子串可以用无数次, 输出组成的所需的串的信息

题目中的取得子串必须 “>= 2” 很好的提示了我们, 想到一个式子 2 * x + 3 * y 可以等于任何数, 所以从之前的串都取长度为2, 为3。
在进行匹配。
**
struct node {
	int l, r, idx;
};

void solve()
{
    int n, m;
    cin >> n >> m;
    vector<int> f(m + 1, 0);
    map<string, node> mp;
    for (int i = 1; i <= n; i ++)
    {
    	string s;
    	cin >> s;
    	// cout << s << '\n';
    	for (int j = 0; j < s.size(); j ++)
    	{
    		string s1 = "";
    		for (int k = 0; k + j < s.size() && k < 3; k ++)
    		{
    			s1 += s[k + j];
    		}
    		if (s1.size() == 3) mp[s1] = {j + 1, j + 3, i};
    		s1 = "";
    		for (int k = 0; k + j < s.size() && k < 2; k ++)
    		{
    			s1 += s[k + j];
    		}
    		if (s1.size() == 2) mp[s1] = {j + 1, j + 2, i};
    	}
    }
    // for (auto t : mp) cout << t.first << ' ';
    // cout << '\n';
    string s;
    cin >> s;
    s = ' ' + s;
    f[0] = 1;
    for (int i = 1; i < s.size(); i ++)
    {
    	if (i >= 2)
    	{
    		string s1 = "";
    		for (int j = 1; j >= 0; j --)
    			s1 += s[i - j];
    		// cout << s1 << '\n';
    		if (mp.count(s1) && s1.size() == 2) f[i] += f[i - 2];
    	}
    	if (i >= 3)
    	{
    		string s1 = "";
    		for (int j = 2; j >= 0; j --)
    			s1 += s[i - j];
    		
    		if (mp.count(s1) && s1.size() == 3) f[i] += f[i - 3];
    	}
    }
    if (f[s.size() - 1] == 0) {cout << -1 << '\n'; return;}
    int idx = m;
    vector<node> ans;
    while (f[idx])
    {
    	if (idx == 0) break;
    	if (idx - 2 >= 0 && f[idx - 2] != 0)
    	{
    		string s1 = "";
    		for (int i = idx - 1; i <= idx; i ++)
    		{
    			s1 += s[i];
    		}
    		ans.push_back({mp[s1].l, mp[s1].r, mp[s1].idx});
    		idx -= 2;
    		continue;
    	}
    	if (idx - 3 >= 0 && f[idx - 3] != 0)
    	{
    		string s1 = "";
    		for (int i = idx - 2; i <= idx; i ++)
    		{
    			s1 += s[i];
    		}
    		ans.push_back({mp[s1].l, mp[s1].r, mp[s1].idx});
    		idx -= 3;
    		continue; 
    	}
    }
    cout << ans.size() << '\n';
    for (int i = ans.size() - 1; i >= 0; i --)
    {
    	cout << ans[i].l << ' ' << ans[i].r << ' ' << ans[i].idx << '\n';
    }
}

标签:Masha,idx,--,s1,cout,Codeforces,int,string
From: https://www.cnblogs.com/NNNZZZ/p/17324301.html

相关文章

  • CSS
    1、什么是CSS    层叠样式表,美化网页 CSS的三种导入方式1、内部样式2、外部样式(链接式,导入式)3、行内样式1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>导出方式</title>6<!--内部样式--&......
  • SpringMVC-JSR303和拦截器
    1.JSR3031.1.什么是JSR303JSR是JavaSpecificationRequests的缩写,意思是Java规范提案。是指向JCP(JavaCommunityProcess)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。JSR-303是JAVAEE6......
  • C语言中,取反运算符~a=-(a+1)的原因
    1、因为计算机直接拿读取到的数据去运算付出的代价是最小的,所以计算机存储的数据的形式应该满足读取后不必经过任何加工就能直接用来运算由于原码不经加工无法实现(+a)+(-a)=0,所以不满足该要求,为了满足(+a)+(-a)=0的要求,人们设计出了补码来满足该要求因而计算机中存储数据的形式......
  • 基于LS-SVM的数据分类matlab仿真测试
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要        LSSVM(LeastSquareSVM)是将Kernel应用到ridgeregression中的一种方法,它通过将所有样本用最小二乘误差进行拟合(这个拟合是在kernel变换过的高维空间),但是LSSVM的缺陷是计算复杂度大......
  • 批量归一化 BatchNormalization
    一、BatchNormalization   如果设定了合适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利地进行学习。为了使各层拥有适当的广度(激活值分布不能太广,易饱和),BatchNormalization试图在学习过程中“强制性”地调整激活值的分布会怎样呢?缓解内部协变量偏移。......
  • CentOS7---Nginx安装并配置虚拟主机
    1、源码安装nginx,并提供服务脚本源码包的获取:官网下载实验环境:和企业环境类似,关闭防火墙,禁用selinux,使用静态IP地址安装步骤:步骤一:安装Nginx所需的pcre库[root@node01~]#yuminstallpcre-devel-y步骤二:安装依赖包[root@node01~]#yum-yinstallgcgccgcc-c++zlib......
  • APP爬虫初阶之Pixel2刷机root
    pixel2刷机刷机准备lineageziptwrpimgmagiskzip(github上下的是APK,需要把后缀改为zip)刷机步骤首先需要一个底包,这里我用的出厂自带的google官方系统,没有重新刷入手机上打开usb调试,关闭屏幕超时锁屏,打开OEM锁手机完全关机,按住向下键重启(或者通过adbrebootbootl......
  • C 语言版线程池
    一、初始线程池1.1何为线程池?我们先来打个比方,线程池就好像一个工具箱,我们每次需要拧螺丝的时候都要从工具箱里面取出一个螺丝刀来。有时候需要取出一个来拧,有时候螺丝多的时候需要多个人取出多个来拧,拧完自己的螺丝那么就会把螺丝刀再放回去,然后别人下次用的时候再取出来用。......
  • Linux 基金会发布 2017 最佳 Linux 发行名单
    Linux 基金会官网Linux.com近日发布了一篇名为“2017年最佳Linux发行版”的文章,并表示这些是从数百个发行版中发现的最好的Linux发行版。1、最佳系统管理员发行版:ParrotLinux2、最近轻量级发行版:LXLE3、最佳桌面发行版:ElementaryOS4、最佳验证发行版:Gentoo......
  • Linux 基金会发布 2017 最佳 Linux 发行名单
    Linux 基金会官网Linux.com近日发布了一篇名为“2017年最佳Linux发行版”的文章,并表示这些是从数百个发行版中发现的最好的Linux发行版。1、最佳系统管理员发行版:ParrotLinux2、最近轻量级发行版:LXLE3、最佳桌面发行版:ElementaryOS4、最佳验证发行版:Gentoo......