题意:给出两个等长的字符串,0可以变成1,?可以变成0和1,可以任意交换s中任意两个字符的位置,问从s变成t至少需要多少次操作

先可以画个草图

发现需要考虑的就是

1---0

0---1

?---0

?---1

下面三种都是只需要一次操作就可以完成的,

所以应该优先考虑1---0

如果存在0---1,就优先交换1---0和0---1,因为这样可以同时满足两组

如果不存在0---1,就交换1---0与?---1,这样每交换一次,需要两次操作,即先将问号变成0,再交换

如果最后都还剩下有1--0(因为下面的0是动不了的,无法再配对了),说明上面的1找不到与它配对的了,不存在

自己写的挫爆了(而且还是错的----)---网上看了好几篇题解的贪心也好繁琐

学习的这一篇 http://acm.lilingfei.com/uva-12545-bits-equalizer-%E4%B9%A0%E9%A2%988-3_98

好棒o(≧v≦)o~~

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; char s[maxn];
char t[maxn]; int main(){
int T;
scanf("%d",&T);
int kase=;
while(T--){
cin>>s;
cin>>t; int len=strlen(s);
int one_zero=,zero_one=,q_one=,q_zero=; for(int i=;i<len;i++){
if(s[i]==''&&t[i]=='') one_zero++;
if(s[i]==''&&t[i]=='') zero_one++;
if(s[i]=='?'&&t[i]=='') q_one++;
if(s[i]=='?'&&t[i]=='') q_zero++;
} int ans=;
while(one_zero&&zero_one){
ans++;
one_zero--;
zero_one--;
}
while(one_zero&&q_one){
ans+=;
one_zero--;
q_one--; } if(one_zero) ans=-;
else ans+=zero_one+q_one+q_zero; printf("Case %d: %d\n",++kase,ans);
}
return ;
}

最新文章

  1. XML学习笔记(四)-- 修饰XML文档的CSS
  2. WebService站点服务的地址
  3. 【c++】标准模板库STL入门简介与常见用法
  4. 部门树形结构,使用Treeview控件显示部门
  5. eclipse启动不了,让查看.metadata/.log
  6. bzoj 1503: [NOI2004]郁闷的出纳员 Treap
  7. Android ListView SimpleAdapter支持Bitmap类型图片显示
  8. ios可变数组的所有操作
  9. Hybris商品图片导入与压缩有关的配置
  10. CSS2--字体样式
  11. 第二节: 比较EF的Lambda查询和Linq查询写法的区别
  12. JVM笔记(虚拟机各内存的介绍)
  13. ALGO-140_蓝桥杯_算法训练_P1101
  14. 企业计划体系的变迁:从ERP到APS再到SCP
  15. file not found app文件
  16. thunk函数
  17. 在js中做数字字符串补0
  18. 【zznu-夏季队内积分赛3-G】2333
  19. 冥冥中转到了mac 上进行开发
  20. jQuery remove 内存 释放

热门文章

  1. layer Tips参数使用
  2. linux安装lua
  3. Post请求JSON格式数据,cookies获得
  4. poj 2828 Buy Tickets【线段树 单点更新】
  5. Thingworx 使用REST API获取JSON数据
  6. php基础-----常量const和define的区别
  7. 数据库过滤操作中 != 或者 &lt;&gt; 指定操作数并不能改匹配到NULL值
  8. 5G商用时代来临!这些产业将发生变革
  9. Java数据库开发
  10. 新手学python-Day4-作业