CF1400-C. Binary String Reconstruction

题意:

对于一个二进制字符串\(s\),以及一个给定的\(x\),你可以通过一下操作来得到字符串\(w\):

对于字符串\(s\)的第\(i\)位,

1. 如果\(i-x\)有意义并且\(s[i-x]==1\)那么\(w[i]=1\) ;

2.如果\(i+x\)有意义并且\(s[i+x]==1\),那么\(w[i]=1\);

如果上面两条都不符合,那么\(w[i]=0\).

现在题目给出你字符串\(w\)和\(x\),让你找出符合要求的字符串\(s\),如果不存在这样的字符串\(s\)那么输出\(-1\)。


思路:

对于给出的字符串\(w\),如果\(w[i]==1\),那么必定有\(s[i-x]=0,s[i+1]=0\)。

将其他非\(0\)的位置补为\(1\)。然后按照上面给出的操作再由\(s\)得到\(w_1\),如果\(w=w_1\)那么\(s\)就是答案,否则没有答案输出\(-1\)。

之所以需要由\(s\)再得到一遍\(w_1\)然后用\(w\)和\(w_1\)进行比较,原因在于:我们设\(w\)的一个位置\(p=x\),若\(w[2x]=0\),那么在\(w[2x]\)处就会有\(s[x]=0,s[3x]=0\),而如果\(w[0]=1\),那么就要求\(s[x]=1\),一个位置不可能有两个值,而在上面由\(w\)得到\(s\)的过程中无法检查出这个问题。


#include <cstdio>
#include <cstring>
#include <algorithm> const int Maxn = 100005; char str[Maxn];
int s[Maxn], w[Maxn], x; void solve() {
scanf("%s %d", str, &x);
int len = strlen(str);
for (int i = 0; i < len; i++) {
w[i] = str[i] - '0';
}
std::fill(s, s + len, 1);
for (int i = 0; i < len; i++) {
if (w[i] == 0) {
if (i - x >= 0) {
s[i - x] = 0;
}
if (i + x < len) {
s[i + x] = 0;
}
}
}
bool flag = true;
for (int i = 0; i < len; i++) {
int t = 0;
if ((i - x >= 0 && s[i - x] == 1) || (i + x) < len && s[i + x] == 1) {
t = 1;
}
if (w[i] != t) {
flag = false;
break;
}
}
if (flag) {
for (int i = 0; i < len; i++) {
printf("%d", s[i]);
}
printf("\n");
} else {
printf("-1\n");
}
} int main() {
int T;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}

CF1400-C. Binary String Reconstruction的更多相关文章

  1. Educational Codeforces Round 94 (Rated for Div. 2) String Similarity、RPG Protagonist、Binary String Reconstruction、Zigzags 思维

    题目链接:String Similarity 题意: 首先题目定义了两个串的相似(串的构成是0.1),如果两个串存在对于一个下标k,它们的值一样,那么这两个串就相似 然后题目给你一个长度为2n-1的串 ...

  2. Educational Codeforces Round 94 (Rated for Div. 2) C. Binary String Reconstruction (构造)

    题意:给你一个字符串\(s\),原字符串为\(w\),如果\(i>x\)且\(w_{i-x}=1\),那么\(s_{i}=1\),如果\(i+x\le n\)且\(w_{i+x}=1\),那么\ ...

  3. Binary String Matching

    问题 B: Binary String Matching 时间限制: 3 Sec  内存限制: 128 MB提交: 4  解决: 2[提交][状态][讨论版] 题目描述 Given two strin ...

  4. NYOJ之Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述     Given two strings A and B, whose a ...

  5. ACM Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Given two strings A and B, whose alp ...

  6. Binary String Matching(kmp+str)

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Given two strings A and B, whose alp ...

  7. encode_json 会对给定的Perl的数据结构转换为一个UTF-8 encoded, binary string.

    use JSON qw/encode_json decode_json/ ; use Encode; my $data = [ { 'name' => 'Ken' , 'age' => 1 ...

  8. perl encode_json 会产生 UTF-8 (binary) string decode_json 需要一个 UTF-8 (binary) string

    encode_json $json_text = encode_json $perl_scalar Converts the given Perl data structure to a UTF-8 ...

  9. NYOJ 5 Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Given two strings A and B, whose alp ...

随机推荐

  1. innodb是怎么刷新日志缓冲的

    当innodb把日志缓冲刷新到磁盘日志文件的时候,先会用一个mutex锁住缓冲区,刷新到所需要的位置,然后移动剩下的条目到缓冲区的前面,当mutex释放时,可能有超过一个事务已经准备好刷新其日志记录, ...

  2. Oracle 10g 如何调整 sga_max_size 与 sga_target

    sga_max_size是相对于操作系统来讲的,当启动oracle时,一次性分配给oracle实例的sga不会超过sga_max_size值:而sga_target是相对于oracle这个正在运行的应 ...

  3. Electron实用技巧-开机启动时隐藏主窗口,只显示系统托盘

    # 1 在桌面软件中,开机自启动是很常见的功能,在electron中也提供了很好的支持,以下是主要代码: //应用是否打包if (app.isPackaged) {  //设置开机启动  app.se ...

  4. oracle创建恢复编录(recovery catalog)

    1.在要作为恢复编录的数据库创建用户 create user rman identified by oracle default tablespace system temporary TABLESP ...

  5. 史上最全postgreSQL体系结构(转)

    原文链接:https://cloud.tencent.com/developer/article/1469101 墨墨导读:本文主要从日志文件.参数文件.控制文件.数据文件.redo日志(WAL).后 ...

  6. WMIC 查看bios配置信息

    如何查看我们的主板上的BIOS信息呢?有办法,不用安装任何软件,只需要windows自带的命令提示符就行,哈哈 WMIC BIOS LIST FULL /FORMAT:VALUE 如果第一次使用wmi ...

  7. SpringBoot快速掌握(1):核心技术

    SpringBoot快速掌握(1):核心技术 SpringBoot快速掌握(1):核心技术 SpringBoot快速掌握(1):核心技术 SpringBoot快速掌握(1):核心技术 SpringBo ...

  8. windows_myql 安装与卸载详细讲解,

    windows_myql 安装 注意: 安装前把 所有杀毒软件,安全卫士等关闭. 打开下载的mysql安装文件双击解压缩,运行"mysql-5.5.40-win64.msi". 注 ...

  9. 简易双色球dome分享

    代码如下: <style type="text/css"> div {font-weight: bold;text-align: center;} .tone{widt ...

  10. windows 系统 MySQL_5.6.21安装教程

      1.双击安装文件 mysql_installer_community_V5.6.21.1_setup.1418020972.msi,等待安装界面出现,见下图: 2.勾选:I accept thel ...