洛谷P7814 「小窝 R3」心の記憶
题意
第一行给定两个数字\(n\) \(m\) \((m \ge n)\)分别代表给定字符串长度以及需要构造出的字符串长度
第二行给定一个长度为\(n\)的字符串 (假设原来的字符串是\(a\) 需要构造出来的字符串是 \(x\))
构造出的字符串需要满足 子序列与子串的定义
1.\(x\)的任意一个子串都与\(a\)不相同
2.\(x\)的某一个子序列和\(a\)相同
分析
- 当 \(n=1\)的时候,显然无法存在\(x\)满足条件
- 当 \(n=2\)的时候,如果两个字符串中的字符不同,显然构造不出
- 当 \(n=m\)的时候,显然满足条件\(2\)的时候,\(x\)与\(y\)是一模一样的,无法满足条件\(1\)
假设现在以上三种情况均不可能发生
- 我们可以找到每个与 他的下一个字符相同的字符,然后在这样一对字符中间加入一个与他们不相同的字符
- 如果找不到在第一个字符(除了最后一个的任意一个字符均可)后面输出与它不相同的字符即可
AC_CODE
#define pb push_back
#include <bits/stdc++.h>
#define rep(i, b, s) for(int i = (b); i <= (s); ++i)
using namespace std;
void solve() {
int n, m; scanf("%d%d", &n, &m);
string a; cin >> a;
// 三种不可能构造出的情况
if(n == 1 || n == m || n == 2 && a[0] != a[1]) {
puts("-1");
return;
}
//构造方式为找到每个与 他的下一个字符相同的字符,然后在这样一对字符中间加入一个与他们不相同的字符
// 如果找不到在第一个字符(除了最后一个的任意一个字符均可)后面输出与它不相同的字符即可
//寻找出 每个与 他的下一个字符相同的字符 存起来
vector<int> v;
for(int i = 0; a[i + 1]; i ++)
if(a[i] == a[i + 1]) {
v.pb(i);
}
int len = v.size();
if(!len) { // 找不到的情况
putchar(a[0]);
for(int i = 0; i < m - n; i ++ ) putchar(a[0] ^ 1);
rep(i, 1, n - 1) putchar(a[i]);
puts("");
return;
}
int p = 0;
int ans = m - n;
for(int i = 0; a[i]; i ++ ) { // 找到了这样的字符
putchar(a[i]);
if(i == v[p] && ans) {
putchar(a[i] ^ 1);
p ++; ans --;
if(p == len) {
rep(j, 1, ans) putchar(a[i] ^ 1);
ans = 0;
}
}
}
puts("");
}
signed main()
{
int T = 1;cin >> T;
while(T -- ) solve();
return 0;
}
洛谷P7814 「小窝 R3」心の記憶的更多相关文章
- 洛谷 P6222 - 「P6156 简单题」加强版(莫比乌斯反演)
原版传送门 & 加强版传送门 题意: \(T\) 组数据,求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\g ...
- 洛谷 P4710 「物理」平抛运动
洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 题解-洛谷P6788 「EZEC-3」四月樱花
题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ...
- 【洛谷4005】小Y和地铁(搜索)
[洛谷4005]小Y和地铁(搜索) 题面 洛谷 有点长. 题解 首先对于需要被链接的两个点,样例中间基本上把所有的情况都给出来了. 但是还缺了一种从下面绕道左边在从整个上面跨过去在从右边绕到下面来的情 ...
- 【洛谷3674】小清新人渣的本愿(莫队,bitset)
[洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...
- 这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍
今年3月份,在阿里云北京峰会上,阿里巴巴正式发布了“阿里巴巴小程序繁星计划”,截至当前,已经有成千上万的开发者加入这个计划,使得小程序得到蓬勃发展,然而不可避免的是,这些服务加重了对云端的开发部署.运 ...
- 洛谷 P7879 -「SWTR-07」How to AK NOI?(后缀自动机+线段树维护矩乘)
洛谷题面传送门 orz 一发出题人(话说我 AC 这道题的时候,出题人好像就坐在我的右侧呢/cy/cy) 考虑一个很 naive 的 DP,\(dp_i\) 表示 \([l,i]\) 之间的字符串是否 ...
- 洛谷 P7360 -「JZOI-1」红包(Min-Max 容斥+推式子)
洛谷题面传送门 hot tea. 首先注意到这个 \(\text{lcm}\) 特别棘手,并且这里的 \(k\) 大得离谱,我们也没办法直接枚举每个质因子的贡献来计算答案.不过考虑到如果我们把这里的 ...
随机推荐
- Tomcat 组成与工作原理
开源的 Java Web 应用服务器,实现了 Java EE(Java Platform Enterprise Edition)的部分技术规范,比如 Java Servlet.Java Server ...
- .net core系列源码地址介绍
很早就想写.net core相关教程内容了,但是一方面感觉东西太多了,一方面是太懒了,最近才下定决心,一定要写点东西出来,希望能支持一下国内.net 的尴尬处境 好了,先从.net core开源开始吧 ...
- 【白话科普】10s 从零看懂 H5
最近大家有没有发现,很多微信公众号的动态内容变多了?我们常常可以看到,公众号内容中有很多动态图片甚至动画,还可以通过手指滑动切换页面,或者有一些小的点击互动. 这种看起来有点高级的小作品,其实是都是& ...
- python 使用demical模块四舍五入
前言: 断言部分需要用到四舍五入,首先使用的是python自带的round(),做四舍五入进位处理,但使用过程中,发现round似乎是当保留小数位的最后一位是偶数,和保留小数位后一位为5时,就不进位. ...
- Python 使用timeit模块计算时间复杂度时系统报“invalid syntax”错误
最近在看算法相关的文档 在时间复杂度环节 遇到一个实例: 导入timeit模块后,通过Timer定时器计算两种不同处理方法的时间复杂度 错误代码及报错如下图所示: 仔细查阅 发现from__main_ ...
- Windows Batch 编程 和 Powershell 编程
Batch Script - Functions with Return Values https://www.tutorialspoint.com/batch_script/batch_script ...
- java 方法 compareTo()的正确使用
总结:(1)如果比较的是数字 则结果大于则为1 等于则为0 小于则为-1(2)如果比较的是字符[串] 则按照从左到右排序找对应不一样的字符第一个字符, 然后将字符装对应的ASCLL码数字,做减法运算, ...
- Python的内存管理和垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- CODING 携手 Thoughtworks 助力老百姓大药房打造”自治、自决、自动”的敏捷文化
老百姓大药房是中国具有影响力的药品零售连锁企业,中国药品零售企业综合竞争力百强冠军.中国服务业 500 强企业.湖南省百强企业. 自 2001 年创立以来,现已成功开发了湖南. 陕西.浙江.江苏等 * ...
- springboot打包第三方jar包是失败
在项目开发时有时我们需要引入一些在maven仓库中不存在的包 一.配置maven环境变量 在path环境变量中添加 %maven_home%\bin (window10环境下) cmd界面输入 mvn ...