传送门

题意: 给出两个长度为n的二进制串a和b,你每次可选取一段前缀子串取反并翻转(即:10010 -> 01101 -> 10110).已知在3 * n次操作内一定能将a变成b。先让你找到一种处理方法将a变成b,且操作次数不得超过3 * n。输出处理的次数,和每次选择的前缀长度。

思路:

  • 既然是每次翻转整个前缀,那么意味着每次前面的字符都会发生改变,那么我们就可从后往前改变。
  • 从后往前挨个看,若当前位置和目标b该位置一样就直接考虑前一个字符。
  • 因为是取反后还要交换,所以每次的a[i]都是和a[1]在替换。若当前b[i]和a[1]一样,那么取反翻转后还是a[i] != b[i],所以我们先让a[1]取反(即让a[1]与b[i]相反)。而当a[1]与b[i]不一样时,直接前i长度的子串取反翻转即可,然后再考虑下一个位置的字符。

代码实现:

#include<bits/stdc++.h>
//#define endl '\n'
#define null NULL
#define ll long long
#define int long long
#define pii pair<int, int>
#define lowbit(x) (x &(-x))
#define ls(x) x<<1
#define rs(x) (x<<1+1)
#define me(ar) memset(ar, 0, sizeof ar)
#define mem(ar,num) memset(ar, num, sizeof ar)
#define rp(i, n) for(int i = 0, i < n; i ++)
#define rep(i, a, n) for(int i = a; i <= n; i ++)
#define pre(i, n, a) for(int i = n; i >= a; i --)
#define IOS ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);
const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
using namespace std;
const int  inf = 0x7fffffff;
const double PI = acos(-1.0);
const double eps = 1e-6;
const ll   mod = 1e9 + 7;
const int  N = 2e5 + 5;int t, n;
string a, b;
vector<int> vt;signed main()
{IOS;cin >> t;while(t --){a.clear(); b.clear(); vt.clear();cin >> n >> a >> b;a = 'a' + a;  b = 'b' + b;for(int i = n; i; i --){if(a[i] == b[i]) continue;if(a[1] == b[i]){if(a[1] == '1') a[1] = '0';else a[1] = '1';vt.push_back(1);}for(int j = 1; j <= i; j ++){if(a[j] == '1') a[j] = '0';else a[j] = '1';}reverse(a.begin() + 1, a.begin() + i + 1);vt.push_back(i);//            cout << "a:" << " " << a << endl;}cout << vt.size() << " ";for(auto it : vt) cout << it << " ";cout << endl;}return 0;
}

Codeforces C1. Prefix Flip (Easy Version) (二进制串 / 模拟 / 构造) (Roun #658 Div.2)相关推荐

  1. C1. Pokémon Army (easy version)(栈模拟)

    有 n 个数,从中选出任意 x (x 为随机数)个数但是不能打乱顺序,有 p 次操作,可以交换对应两个数的位置 现在要求你选出的这几个数中 能够构成  a1-a2+a3-a4--ax  值最大 输出最 ...

  2. Codeforces Round #658 (Div. 1) A2. Prefix Flip (Hard Version)

    Codeforces Round #658 (Div. 1) A2. Prefix Flip (Hard Version) 题目链接 There are two binary strings a an ...

  3. C1. Pokémon Army (easy version)(DP)

    C1. Pokémon Army (easy version)(DP) 思路:dpdpdp. 考虑:分数组长度的奇偶性进行dpdpdp. 令dp[i][0]dp[i][0]dp[i][0]表示前iii ...

  4. CodeForces - 1234B1 Social Network (easy version)

    CodeForces - 1234B1 Social Network (easy version) 题目: The only difference between easy and hard vers ...

  5. #658 (Div. 2) C2.Prefix Flip (Hard Version)

    题目描述 This is the hard version of the problem. The difference between the versions is the constraint ...

  6. CodeForces - 1118F1 Tree Cutting (Easy Version)(树形dp)

    题目链接:点击查看 题目大意:给定n个点,每个点的权值分别对应颜色:0:无颜色,1:红色,2:蓝色,现在需要切割边,使切割后的两个部分不能出现红色和蓝色掺杂的部分,也就是说两个部分必须只能各自含有一个 ...

  7. C1. Pokémon Army (easy version)

    这个大佬写的太好了 以后再回来了看看 另一种写法:找递减序列,注意一点,a[n+1]=0; #include<bits/stdc++.h> #define ll long long #de ...

  8. Codeforces Round #658 (Div. 2)部分题解

    文章目录 A - Common Subsequence B - Sequential Nim C1 - Prefix Flip (Easy Version) C2 - Prefix Flip (Har ...

  9. Codeforces Round #658 (Div. 2)

    A - Common Subsequence 最短相同子序列长度肯定为1,如果一个元素都不相等之间不存在相同子序列 #define IO ios::sync_with_stdio(false);cin ...

最新文章

  1. [svc]gns3模拟器及探讨几个bgp问题
  2. redhat 配置yum代理源
  3. python中cgi到底是什么_十分钟搞懂什么是CGI(转)
  4. 文件系统过滤驱动开发(一)—Win32底层开发小组
  5. 【译】深入理解LSTM网络
  6. python列表解析式如何使用_python列表解析式,生成器,及部分内建函数使用方法...
  7. python处理进度条
  8. 崩溃bug日志总结2
  9. python使用print不换行
  10. python可以处理哪些文件_4招小技巧,带你迅速提升Python文件处理的逼格
  11. sql在insert的同时把某个字段返回来_项目实践:后端接口统一规范的同时,如何优雅得扩展规范?...
  12. bootstrap-table真实交互数据_mysql存储引擎InnoDB详解,从底层看清InnoDB数据结构
  13. Socket套接字简介
  14. TCP/IP网络编程-前三章学习笔记
  15. python语言程序设计王恺pdf_Python语言程序设计
  16. 数据分析师岗位需求分析
  17. deepin linux 安装 磁盘管理,deepin安装教程
  18. 四个步骤告诉你如何进行渠道效果监测
  19. Vue源码剖析(一):抽离AST抽象语法树
  20. word 2016样式设置及样式集保存

热门文章

  1. android夏令时,android 对夏令时的处理
  2. [遥感]利用python爬虫获取美国冰雪数据中心的数据
  3. Redis详解之-事件订阅和持久化存储方式(RDB和AOF)(二)
  4. 基于肤色空间建模+连通域处理的人脸检测算法的MATLAB仿真
  5. 北大火星人最爱教育事业
  6. SpringBoot 控制器方法自定义参数注入
  7. 1、列表推导式、字典推导式
  8. 原来我没懂(浙江温州一考生)
  9. 图解各种悬挂系统优缺点
  10. 使用ArcGIS制作专题图,并添加经纬网