刚開始想了一个变换顺序,模拟进行操作。写了浩浩荡荡200多行最后WA了,感觉还是方法不正确。。。后来从仅仅能0变1,不能1变0入手,应该先满足上1下0的情况,其它的三种情况用简单的变换就能够了。

先用0-1和1-0进行配对。配对一次。交换S中的0和1。

假设没有0-1了,那就用?-1和1-0进行配对。先把?

换成0,再运行上一步。

假设0-1和?

-1都没有了,可是1-0还有,说明无解。

把上面的1配对成功之后。其它的都能够通过一次操作配对。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <bitset>
#include <cassert>
#include <cmath>
#include <functional>using namespace std;const int maxn = 105;
int oneVzero, zeroVone, qVone, qVzero;
int ans;
string S, T;void solve()
{for (int i = 0; i < S.length(); i++) {if (S[i] == '1' && T[i] == '0') {oneVzero++;}else if (S[i] == '0' && T[i] == '1') {zeroVone++;}else if (S[i] == '?' && T[i] == '0') {qVzero++;}else if (S[i] == '?' && T[i] == '1') {qVone++;}}while (oneVzero && zeroVone) { // 交换1-0和0-1oneVzero--;zeroVone--;ans++;}while (oneVzero && qVone) { // 交换1-0和?-1oneVzero--;qVone--;ans += 2;}if (oneVzero) {ans = -1;}else {ans += zeroVone + qVone + qVzero;}
}int main()
{ios::sync_with_stdio(false);int C;cin >> C;int kase = 0;while (C--) {cin >> S >> T;// 初始化ans = 0;oneVzero = zeroVone = qVzero = qVone = 0;solve();cout << "Case " << ++kase << ": " << ans << endl;}return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

Uva - 12545 - Bits Equalizer相关推荐

  1. uva 12545——Bits Equalizer

    题意:给定两个等长的串s和t,其中s串包括0,1,?,T包含0,1,每次可以把s中的0变成1或者交换任意两个数或者?变成任意01.求由s到t的最小步数. 思路:杂.所有带?的都要变成0或则1,那么至少 ...

  2. UVa12545 - Bits Equalizer

    //UVa12545 - Bits Equalizer //贪心 #include<iostream> #define MIN(X,Y) (((X)>(Y))?(Y):(X)) us ...

  3. UVA 11645 Bits(组合数学)

    从左往右处理,左半部分记为left, 右半部分记为right,若i,i -1均为1, 贡献为ans += (left + 1) + right * (1ll << (i - 1)); 否则 ...

  4. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  5. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

  6. Uva 11997 多路归并

    题目链接:https://uva.onlinejudge.org/external/119/11997.pdf 题意: k*k的矩阵,从每一行中选一个元素加起来,可以得到 kk个和,求前 k 个最小值 ...

  7. Uva - 12050 Palindrome Numbers【数论】

    题目链接:uva 12050 - Palindrome Numbers 题意:求第n个回文串 思路:首先可以知道的是长度为k的回文串个数有9*10^(k-1),那么依次计算,得出n是长度为多少的串,然 ...

  8. Uva 10305 给任务排序

    题目链接:https://uva.onlinejudge.org/external/103/10305.pdf 紫书P167 拓扑排序. dfs--从一个点出发,dfs 与之相连的所有点,把本身放入到 ...

  9. UVa 11624,两次BFS

    题目链接:http://vjudge.net/contest/132239#problem/A 题目链接:https://uva.onlinejudge.org/external/116/11624. ...

最新文章

  1. c++标准库 及 命名空间std
  2. 使用Wamp搭建Php本地开发环境,HBuilder调试
  3. (chap4 Http状态码) 5XX
  4. python中变量作用域
  5. 分布式架构的分布式文件系统
  6. C#使用DataContractJsonSerializer来进行JSON解析
  7. 谷歌guava_Google Guava v07范例
  8. LazyInitializationException的四种解决方案–第2部分
  9. Visual Studio调试ASP代码
  10. C#中事务的简单使用
  11. oracle jinitiator版本太旧,Oracle Jinitiator 版本太旧或过低怎么办
  12. ABP理论学习之日志记录
  13. psm倾向得分匹配法举例_倾向得分匹配法的详细解读
  14. Native method not found: com.autonavi.amap.mapcore.MapProjection.nativeLonLat2Geo:(DDLcom/autonavi/a
  15. 在Ubuntu 20.04(Linux Mint 各衍生版)上安装使用国金证券 通达信 客户端软件。
  16. echarts设置tooltips样式以及调取数据
  17. 「敏捷」Stacey Matrix模型帮你确定合适的项目管理方法
  18. oracle的ofs,windows2003+oracle ofs 双机
  19. 类的封装性、继承性和多态性设计
  20. 以太坊--Uniswap分享

热门文章

  1. 人人都能搞懂的AI(四)- AI对社会的影响
  2. SAP MM 经过审批之后的PR单据被MRP RUN 之后Overwrite问题之对策
  3. 应用丨其实,你每天都生活在人工智能中
  4. 干货丨大规模机器学习框架的四重境界(经典长文,值得收藏)
  5. Centos7如何轻松配置yum国内源
  6. 并行计算与分布式计算
  7. 一个没有意义的宇宙我们很难想象
  8. 费曼:所有的科学知识都是不确定的
  9. 日本面向未来的特定科技领域技术预见分析
  10. Science公布:全世界最前沿的125个科学问题