题目意思很简单,给你两个串,第一个串为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. WPF 背景颜色渐变的滑动条实现

    原文:WPF 背景颜色渐变的滑动条实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83507 ...

  2. Java中如何创建一个确保唯一的名字,文件名

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客要讲的有,如何创建一个唯一的文件名,创建一个唯一的String字符串 为什么要创建唯一呢?再很多情况下 ...

  3. 远程连接ejabberd的mnesia数据库

    由于服务器是server版本,所以很难直观的看到mnesia的数据.所以对于初学者来说非常的困惑. 特地在qq群中请教了别人.别人说只要pong通了就行,就能通过rpc去操作远程的mnesia数据库. ...

  4. javaweb(二十四)——jsp传统标签开发

    一.标签技术的API 1.1.标签技术的API类继承关系 二.标签API简单介绍 2.1.JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属 ...

  5. Lua学习笔记(2): 流程控制与循环以及初涉迭代器

    条件判断语句 --if...语句 if (表达式) then --表达式为1时执行的语句 end --if...else语句 if (表达式) then --表达式为1时执行的语句 else --表达 ...

  6. 136.只出现一次的数字 leetcode ^运算符 JavaScript解法

    leetcode上的一道题简单题 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间 ...

  7. Java学习计划

    Java学习计划&书单--2018.10.13 W3C Struts教程 W3C Spring教程 W3C Hibernate教程 <深入JavaWeb技术内幕> Java Web ...

  8. 【RL系列】从蒙特卡罗方法步入真正的强化学习

    蒙特卡罗方法给我的感觉是和Reinforcement Learning: An Introduction的第二章中Bandit问题的解法比较相似,两者皆是通过大量的实验然后估计每个状态动作的平均收益. ...

  9. ExpressJS基础概念及简单Server架设

    NodeJS Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.js 的包 ...

  10. node项目设置环境变量

    在UNIX系统中: $ NODE_ENV=production node app 在Windows中: $ set NODE_ENV=production $ node app 这些环境变量会出现在程 ...