洛谷八月月赛 II T2 题解
Content
现有 \(T\) 次询问。 每次询问给定一个长度为 \(n\) 的 01 串,记为 \(A\)。回答应是一个字符串 \(B\),满足:
- \(B\) 是长度为 \(m\) 的 01 串。
- \(B\) 中不存在任意一个子串与 \(A\) 相同。
- \(B\) 中存在至少一个子序列与 \(A\) 相同。
若有多解输出任意一个解。
数据范围:\(1\leqslant n\leqslant m\),\(1\leqslant\sum m\leqslant 2\times 10^6\),\(A_i\in\{0,1\}\)。
Solution
这里直接讲正解。
首先,下列情况不能够造出符合要求的 B:
- \(n=1\)。
- \(n=m\)。
- \(n=2\) 且字符串是
01
或10
。
否则可以构造出一种方案。构造方案如下:
- 如果字符串形如
000...1
或者111...0
的话,则先在第一个字符后面插入一个与第一个字符不同的字符(如果第一个字符是1
则在后面插入0
,反过来则插入1
),然后如果长度不够的话就在后面不停地插入最后一个字符相同的字符直到长度达到 \(m\) 为止。 - 否则在原字符串最后一个字符之前插入 \(m-n\) 个与最后一个字符不同的字符即可。
是不是很简单呢?
Code
namespace Solution {
iv Main() {
MT {
int n, m;
read(n, m);
string s; cin >> s;
if(n == 1 || n == m) puts("-1");
else {
string ans = s.substr(0, n - 1);
int fl0 = 1, fl1 = 1;
F(int, i, 0, (int)ans.size() - 1) if(ans[i] != '0') fl0 = 0; else if(ans[i] != '1') fl1 = 0;
if((fl0 && s[n - 1] == '1') || (fl1 && s[n - 1] == '0')) {
if(n == 2) puts("-1");
else {
string ans2 = ""; ans2 += ans[0];
if(ans[0] == '0') ans2 += "1";
else ans2 += "0";
ans2 += s.substr(1, n - 1);
F(int, i, n + 1, m - 1) ans2 += s[n - 1];
cout << ans2 << endl;
}
continue;
}
if(s[n - 1] == '0') {
F(int, i, n, m - 1) ans += "1";
ans += s.substr(n - 1, 1);
} else {
F(int, i, n, m - 1) ans += "0";
ans += s.substr(n - 1, 1);
}
cout << ans << endl;
}
}
return;
}
}
洛谷八月月赛 II T2 题解的更多相关文章
- 洛谷八月月赛 II T1 题解
Content 在大小为 \(n\) 的数字三角形中,第 \(i\) 行包含有 \(i\) 个数字,数字从上到下,从左到右依次排列为 \(1,2,3,\dots\). 设第 \(i\) 行第 \(j\ ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
- 洛谷九月月赛II
题解:模拟 一旦不匹配就要break #include<iostream> #include<cstdio> #include<cstring> #include& ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- 洛谷五月月赛【LGR-047】划水记
虽然月赛有些爆炸,但我永远资瓷洛谷! 因为去接水,所以迟到了十几分钟,然后洛谷首页就打不开了-- 通过洛谷题库间接打开了比赛,看了看\(TA\),WTF?博弈论?再仔细读了读题,嗯,判断奇偶性,不过要 ...
- [洛谷P1823]音乐会的等待 题解(单调栈)
[洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
随机推荐
- vue 3 学习笔记 (八)——provide 和 inject 用法及原理
在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传 ...
- appScan安全软件的使用
1.点击文件,新建 2.常规扫描 3.点击下一步 4.输入需要扫描的网站 5.下一步,如果有账号 密码可以使用记录. 6.选择缺省值,下一步 7.启动全面扫描.
- ARC128D
考虑我们直接\(dp\). 那么需要快速的求出一段是否可以被消掉只剩两端. 我们可以考虑反过来做的. 我们知道如果全为\(abab\)型或者\(aa\)型则无法消掉 那么我们要前缀和,以及遇到\(aa ...
- 洛谷 P4463 - [集训队互测 2012] calc(多项式)
题面传送门 & 加强版题面传送门 竟然能独立做出 jxd 互测的题(及其加强版),震撼震撼(((故写题解以祭之 首先由于 \(a_1,a_2,\cdots,a_n\) 互不相同,故可以考虑求出 ...
- 洛谷 P5048 - [Ynoi2019 模拟赛] Yuno loves sqrt technology III(分块)
题面传送门 qwq 感觉跟很多年前做过的一道题思路差不多罢,结果我竟然没想起那道题?!!所以说我 wtcl/wq 首先将 \(a_i\) 离散化. 如果允许离线那显然一遍莫队就能解决,复杂度 \(n\ ...
- 洛谷 P7718 -「EZEC-10」Equalization(差分转化+状压 dp)
洛谷题面传送门 一道挺有意思的题,现场切掉还是挺有成就感的. 首先看到区间操作我们可以想到差分转换,将区间操作转化为差分序列上的一个或两个单点操作,具体来说我们设 \(b_i=a_{i+1}-a_i\ ...
- python-django-聚合与统计
l例子1: 这里的values_list 相当于SQL语句里面的GROUP BY的功能,但是返回的是一个元组 要实现示例当中的直接用,与数据库格式有关将模型设计得更加完美 模型: 注意related_ ...
- Linux实现批量添加用户及随机密码小脚本
通过chpasswd命令可实现迅速为用户批量设置密码 实例:写一个脚本,实现批量添加20个用户user1-20,密码为用户名和后面跟5个随机字符 #!/bin/sh # 思路:通过for循环, ...
- hbase调优
@ 目录 一.phoenix调优 1.建立索引超时,查询超时 2.预分区 hbase shell预分区 phoenix预分区 3.在创建表的时候指定salting. 4.二级索引 建立行键与列值的映射 ...
- JavaBean内省与BeanInfo
Java的BeanInfo在工作中并不怎么用到,我也是在学习spring源码的时候,发现SpringBoot启动时候会设置一个属叫"spring.beaninfo.ignore", ...