题意:

给定两个01串,将第一个串通过两种操作变成第二个串。

操作一:将第一个串的最后一个字母移到最前面。

操作二:将相邻的两个字母进行反转,0反转为1, 1反转为0。

问将第一个串转变为第二个串,最少需要进行多少次操作二,输出最少的操作二的操作数,如果不能将第一个串转变为第二个串,则输出 -1。

思路:

首先,可以看到操作一是将第一个串的最后一个字母移到最前面,通常遇到这种操作,都会考虑将字符串扩充两倍,即 SS ,这样的话就可以直接对于字符串进行区间枚举,再暴力进行匹配。

对于每一个字符串的区间,进行暴力匹配,如果字符不一样,则进行操作二,将该字符和之后的那个字符进行反转,最后判断最后一个字符是否与匹配串相同。

这里有一个注意点,就是对于每一个字符串的区间,该区间的首字母和尾字母是可以进行反转的,只需要将该区间取出,再不断执行操作一即可实现。

因此在暴力枚举的时候有两种情况,一种是区间首尾字母没有进行反转的情况,一种是区间首尾字母进行反转之后的情况,对于这两种情况都需要进行判断。

反思:

在做本题的时候,犯的第一个错误是没有想到将字符串扩充两倍,可能也是第一次做这类题目的原因,可以原谅。

第二个错误就是没有想到区间字符串的首尾可以进行交换,这个是题目没有考虑周全的问题,相邻字符可以进行操作二,那么首尾字符也可以进行操作二,需要注意。

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#define rep(i,a,b) for(int i = a; i <= b; i++)
using namespace std;
const int N = 1e4+10;
const int inf = 1e7;char s1[N];
char s2[N];
int ans,len;
char tmp[N];void slip(int x)
{if(tmp[x] == '1') tmp[x] = '0';else tmp[x] = '1';
}void solve(int x)
{rep(i,0,len-1) tmp[i] = s1[x+i];int cnt = 0;rep(i,0,len-2){if(tmp[i] != s2[i]){slip(i), slip(i+1);cnt++;} }if(tmp[len-1] == s2[len-1]) ans = min(ans,cnt);rep(i,0,len-1) tmp[i] = s1[x+i];cnt = 1;slip(0), slip(len-1);rep(i,0,len-2){if(tmp[i] != s2[i]){slip(i), slip(i+1);cnt++;} }if(tmp[len-1] == s2[len-1]) ans = min(ans,cnt);
}int main()
{while(~scanf("%s",s1)){ans = inf;len = strlen(s1);scanf("%s",s2);rep(i,len,len+len-1) s1[i] = s1[i-len];rep(i,0,len){solve(i);}if(ans == inf) printf("-1\n");else printf("%d\n",ans);}return 0;
}

01串匹配问题 —— Binary Strings【Gym - 101845B】相关推荐

  1. Binary Strings

    Binary Strings 题目描述: 这个题目讲述的是,给定两个字符串和,这两个字符串由0和1组成,给定了两个操作,第一个操作是可以将字符串的最后一个字符移到字符串的最前面,第二个操作是可以将连续 ...

  2. 北邮OJ 1010. 16校赛-Binary Strings

    时间限制 5000 ms 内存限制 65536 KB 题目描述 One day, the teacher asked Weishen to judge whether a binary string ...

  3. 01 flv 的 binary 解析

    想要看一下 这个 flv 的格式主要因素为 rtsp视频服务 转换为 rtmp服务 转换为前端可用的服务 , 然后 里面有 flv.js 的代码, 因为之前出现了一些问题 flvjs 播放 ws 服务 ...

  4. CF- Educational Codeforces Round 97 (Rated for Div. 2)-1437B. Reverse Binary Strings【思维/贪心】

    题目链接 题意:给定一个01数量相等的二进制字符串,每次操作可以旋转一段子串,问至少多少次操作可以使得所有相邻字符都不一样. 思路:对于某个"00"开头(结尾),"11& ...

  5. ARC132D-Between Two Binary Strings【贪心】

    正题 题目链接:https://atcoder.jp/contests/arc132/tasks/arc132_d 题目大意 给出两个恰好有nnn个111和mmm个000的字符串s,ts,ts,t,定 ...

  6. 【2019牛客暑期多校训练营(第三场)- B】Crazy Binary String(思维,01串,前缀和)

    题干: 链接:https://ac.nowcoder.com/acm/contest/883/B 来源:牛客网 ZYB loves binary strings (strings that only ...

  7. Codeforces Round #644 (Div. 3) H.Binary Median

    题目链接 Consider all binary strings of length m (1≤m≤60). A binary string is a string that consists of ...

  8. Codeforces Round #644 1360H. Binary Median(思维、构造)

    题目描述: time limit per test 2 seconds memory limit per test 256 megabytes Consider all binary strings ...

  9. Java for LeetCode 067 Add Binary

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

  10. LeetCode Add Binary

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

最新文章

  1. Log4j官方文档翻译(一、基本介绍)
  2. 使用Prometheus+Grafana监控JVM
  3. 在 ubuntu 中设置安装 boost 库
  4. Android应用清单文件:AndroidManifest.xml
  5. Java中JFrame怎样控制闪烁_在JFrame Java中闪烁
  6. 从零开始学视觉Transformer(6):Swin Transformer-1
  7. Unity 编辑器内建图标获得
  8. 计算机管理找不到指定模块,卸载时找不到指定模块怎么办_电脑卸载找不到指定模块处理方法-win7之家...
  9. WPF:在XmlDataProvider上使用主-从绑定(Master-Detail Binding)
  10. appium分层自动化的封装
  11. 谷歌插件jsonview的下载与安装
  12. 【antd-design-vue】a-table取消组件自带的暂无数据图片
  13. CloudDB——构建云化网络统一融合数据层
  14. 林语堂、陆谷孙、薄冰、许国璋、何其莘等十位国宝级语言大师谈英语学习方法
  15. Err 1091 - Can't DROP 'car id' check that column/key exis
  16. Web前端工程师怎么样呢?薪资待遇如何呢?
  17. 工作中遇到的问题汇总
  18. 算法初步 计算机程序,算法初步-程序框图
  19. 知乎热榜:计算机专业的学生要怎样做才能避免成为低级的码农?
  20. 第三十六讲:神州无线AP胖AP模式配置与管理

热门文章

  1. PHP_变量什么情况下加大括号{}
  2. POJ 1191 棋盘分割【区间类DP】
  3. In App Purchases(IAP 应用程序內购买): 完全攻略
  4. 企业信息化基本指标构成方案(试行)上
  5. 计算机内存外存共同点,存储器:内存和外存
  6. 计算机数据处理规模大小分为,计算机组成原理题集样稿.doc
  7. catia保存成stp文件时部件丢失_超详细的分布式文件系统FastDFS磁盘恢复介绍
  8. Mysql之各种各样的函数啦
  9. hdoj6298:Maximum Multiple(找规律,总结)
  10. 什么是信用评分分析?