Uva - 12545 - Bits Equalizer
2015-06-23 15:49
381 查看
刚开始想了一个变换顺序,模拟进行操作,写了浩浩荡荡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-1 oneVzero--; zeroVone--; ans++; } while (oneVzero && qVone) { // 交换1-0和?-1 oneVzero--; 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; }
相关文章推荐
- javascript闭包
- Uva - 12545 - Bits Equalizer
- poj2923 Relocation
- Azure Queue队列存储(1)
- qt4.8.4+mingw在windows上的安装
- Robot Framework 快速入门
- 重定向输入输出流--freopen
- 调用微信接口--机器人自动回复(涉及到远程调用接口以及处理xml文件的方法)图灵机器人
- 介绍一下JSP中application的用法?
- eclipse怎么设置字体大小
- VC中".pch"是什么文件,没有.pch文件怎么办
- ASP.NET获取客户端及服务器的信息
- gsoap浅析之二
- ecshop五级地区
- Win7安全中心出现故障如何解决以保证电脑安全
- Hadoop新手学习指导
- Linux命令之文本处理(二)
- 去掉List中所有null 元素
- 几种自动目标跟踪算法的比较研究
- Nginx源码学习与思考 一