ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CodeForces 1237H Balanced Reversals

2020-06-25 09:57:32  阅读:269  来源: 互联网

标签:Reversals 11 00 01 Balanced cdots le 1237H 翻转


CodeForces 1237H Balanced Reversals

2s,512MB

长度为偶数 \(n\) 的01串 \(a,b\) .

问是否可以通过至多 \(n+1\) 次如下操作将 \(a\) 变成 \(b\) .

  • 选择一个偶数 \(p \le n\) ,将 \(a\) 变成 \(a_pa_{p-1}\cdots a_1a_{p+1} a_{p+2}\cdots a_n\)

若存在,输出方案.

\(T\) 组数据.

\(1 \le T \le 2000\) ,所有数据 \(n\) 的和不超过 \(4000\)

Tutorial

思考 \(a,b\) 中按形如 \(a_1a_2,a_3a_4...\) 的方式分割时,如果我们可以如下操作

  • 假如当前 \(a[1\cdots i]=b[n-i+1\cdots n]\)
  • 找到 \(x\) 满足 \(x \equiv 1 \mod 2\) 且 \(a_x=b_{n-i},a_{x+1}=b_{n-i-1}\)
  • 翻转 \(x-1,x+1\)
  • 现在 \(a[1 \cdots i+2]=b[n-i-1\cdots n]\)

总操作次数为 \(2 \cdot \dfrac n2=n\) .

发现需要00=00,01=10,10=01,11=11

如果00!=00或11!=11,那么一定无解

否则就需要额外一步将01与10转化的操作

考虑能否用1步完成所有的转化,发现总是可以通过翻转 \(a\) 或 \(b\) 的一个前缀来完成(翻转 \(b\) 的一个前缀相当于在最后翻转 \(a\) 的对应前缀).

复杂度 \(O(n^2)\)

标签:Reversals,11,00,01,Balanced,cdots,le,1237H,翻转
来源: https://www.cnblogs.com/ljzalc1022/p/13191143.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有