题目意思很简单,给你两个串,第一个串为0,1或者?,第二个串为0,1,

每次你可以对第一个串进行三种操作,1、0变为1;2、?变为0或者1;3、交换任意两个数的位置。

现在问你能否把第一个串变为第一个串?最少的步数是多少呢 ??

其实关键抓住一点:0可以变1,1不能变0。

然后剩下的就是简单的贪心了。

#include <iostream>
#include <cstring>
#include <cstdio>
#define maxn 122
using namespace std; char s1[maxn],s2[maxn];
int n,m,l,t,z1,z2,o1,o2,ans,cas=,tep; int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%s",s1+);
scanf("%s",s2+);
printf("Case %d: ",++cas);
l=strlen(s1+);
ans=o1=o2=z1=z2=;
for (int i=; s1[i]; i++)
{
if (s1[i]=='') z1++;
if (s1[i]=='') o1++;
if (s2[i]=='') z2++;
if (s2[i]=='') o2++;
}
if (z1>z2)
{
printf("-1\n");
continue;
}
for (int i=; s1[i]; i++)
{
if (s1[i]=='?')
{
if (s2[i]=='' && z1<z2)
{
s1[i]='';
z1++;
ans++;
}
}
}
for (int i=; s1[i]; i++)
{
if (s1[i]=='?')
{
if (s2[i]=='' && o1<o2)
{
s1[i]='';
o1++;
ans++;
}
}
} for (int i=; s1[i]; i++)
if (s1[i]=='?')
{
if (s2[i]=='') s1[i]='',o1++;
else s1[i]='',z1++;
ans++;
} for (int i=; s1[i]; i++)
{
if (z1<z2 && s1[i]=='' && s2[i]=='')
{
ans++;
s1[i]='';
z1++,o1--;
}
} tep=;
for (int i=; s1[i]; i++)
if (s1[i]!=s2[i]) tep++;
if (tep&)
{
printf("-1\n");
continue;
}
ans+=(tep>>);
printf("%d\n",ans);
}
return ;
}

UVA12545_Bits Equalizer的更多相关文章

  1. uva12545 Bits Equalizer

    uva12545 Bits Equalizer You are given two non-empty strings S and T of equal lengths. S contains the ...

  2. UVA12545-Bits Equalizer(思维)

    Problem UVA12545-Bits Equalizer Accept: 821  Submit: 4548Time Limit: 3000 mSec Problem Description I ...

  3. UVA 12545 Bits Equalizer

    题意: 两个等长的字符串p和q,p有‘0’,‘1’,‘?’组成,q由‘0’,‘1’组成.有三种操作:1.将‘?’变成0:2.将‘?’变成‘1’:3.交换同一字符串任意两个位置上的字符.问有p变到q最少 ...

  4. UVa 12545 Bits Equalizer (贪心)

    题意:给出两个等长的字符串,0可以变成1,?可以变成0和1,可以任意交换s中任意两个字符的位置,问从s变成t至少需要多少次操作. 析:先说我的思路,我看到这应该是贪心,首先,如果先判断s能不能变成t, ...

  5. 8-3 Bits Equalizer uva12545

    题意: 给出字符串s包含'0' '1' '?'; 再给出字符串t只包含01: 现在我们可以对S做三个操作:把0变成1,把?变成0或1,任意两个位置交换: 问最少操作几次s == t: 贪心 默认除去那 ...

  6. Bits Equalizer UVA - 12545

    点击打开链接 #include<cstdio> #include<cstring> /* 别看错了:0能变1,1不能变0 能完成的条件是,s与t长度相等且s中0数量和?数量之和 ...

  7. UVa 12545 Bits Equalizer【贪心】

    题意:给出两个等长的字符串,0可以变成1,?可以变成0和1,可以任意交换s中任意两个字符的位置,问从s变成t至少需要多少次操作 先可以画个草图 发现需要考虑的就是 1---0 0---1 ?---0 ...

  8. 【习题 8-3 UVA - 12545】Bits Equalizer

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果1的个数第一个串比第2个串多. 那么就无解. 否则. 找几个位置去凑1 优先找'?'然后才是0的位置 剩余的全都用swap操作就 ...

  9. UVA - 12545 Bits Equalizer (比特变换器)(贪心)

    题意:输入两个等长(长度不超过100)的串S和T,其中S包含字符0,1,?,但T只包含0和1,你的任务是用尽量少的步数把S变成T.有以下3种操作: 1.把S中的0变成1. 2.把S中的“?”变成0或1 ...

随机推荐

  1. print puts p

    共同点:都是用来屏幕输出的. 不同点:puts 输出内容后,会自动换行(如果内容参数为空,则仅输出一个换行符号):另外如果内容参数中有转义符,输出时将先处理转义再输出p 基本与puts相同,但不会处理 ...

  2. struts2官方 中文教程 系列四:Action

    先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列四:Action  即 http://www.cnblogs.com/linghaoxinpian/p/6905521.html 下载 ...

  3. [SDOI2010]地精部落 DP

    LG传送门 DP好题 题意很简单,就是求1-n的排列,满足一个数两边的数要么都比它大要么都比它小,求这样的排列个数对\(p\)取膜的值(为了表述简单,我们称这样的排列为波动序列). 这个题我第一眼看到 ...

  4. ffmpeg 踩坑实录 近期使用总结(三)

    一.背景介绍 将ffmpeg运用到项目上已经有一段时间了,趁现在有空赶紧记下来. 二.技术点总结    2.1 实现方式 项目里面主要运用的形式是,在java端,调用操作系统的方法,并执行切片命令. ...

  5. CentOS7.x安装Docker1.11.1

    原文发表于cu:2016-05-30 本文属于重发,当前Docker已经分为EE与CE版本,CE版本是17.06.0-ce,最新的CE版本安装方式已略有不同:但可以指定安装版本,如1.11.1,1.1 ...

  6. centos 7.2 安装apache,mysql,php5.6

    安装Apache.PHP.Mysql.连接Mysql数据库的包: yum -y install httpd yum -y install php yum -y install php-fpm yum  ...

  7. 7.hdfs工作流程及机制

    1. hdfs基本工作流程 1. hdfs初始化目录结构 hdfs namenode -format 只是初始化了namenode的工作目录 而datanode的工作目录是在datanode启动后自己 ...

  8. ES6的新特性(18)——async 函数

    async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Generato ...

  9. Asphalting Roads(翻译!)

    Description City X consists of n vertical and n horizontal infinite roads, forming n × n intersectio ...

  10. Spring学习(七)——增强类

    Spring 切点 什么是切点?切点(Pointcut),每个程序类都拥有多个连接点,如一个拥有两个方法的类,这两个方法都是连接点,即连接点是程序类中客观存在的事物.但在这为数从多的连接点中,如何定位 ...