UVA12545_Bits Equalizer
题目意思很简单,给你两个串,第一个串为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的更多相关文章
- uva12545 Bits Equalizer
uva12545 Bits Equalizer You are given two non-empty strings S and T of equal lengths. S contains the ...
- UVA12545-Bits Equalizer(思维)
Problem UVA12545-Bits Equalizer Accept: 821 Submit: 4548Time Limit: 3000 mSec Problem Description I ...
- UVA 12545 Bits Equalizer
题意: 两个等长的字符串p和q,p有‘0’,‘1’,‘?’组成,q由‘0’,‘1’组成.有三种操作:1.将‘?’变成0:2.将‘?’变成‘1’:3.交换同一字符串任意两个位置上的字符.问有p变到q最少 ...
- UVa 12545 Bits Equalizer (贪心)
题意:给出两个等长的字符串,0可以变成1,?可以变成0和1,可以任意交换s中任意两个字符的位置,问从s变成t至少需要多少次操作. 析:先说我的思路,我看到这应该是贪心,首先,如果先判断s能不能变成t, ...
- 8-3 Bits Equalizer uva12545
题意: 给出字符串s包含'0' '1' '?'; 再给出字符串t只包含01: 现在我们可以对S做三个操作:把0变成1,把?变成0或1,任意两个位置交换: 问最少操作几次s == t: 贪心 默认除去那 ...
- Bits Equalizer UVA - 12545
点击打开链接 #include<cstdio> #include<cstring> /* 别看错了:0能变1,1不能变0 能完成的条件是,s与t长度相等且s中0数量和?数量之和 ...
- UVa 12545 Bits Equalizer【贪心】
题意:给出两个等长的字符串,0可以变成1,?可以变成0和1,可以任意交换s中任意两个字符的位置,问从s变成t至少需要多少次操作 先可以画个草图 发现需要考虑的就是 1---0 0---1 ?---0 ...
- 【习题 8-3 UVA - 12545】Bits Equalizer
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果1的个数第一个串比第2个串多. 那么就无解. 否则. 找几个位置去凑1 优先找'?'然后才是0的位置 剩余的全都用swap操作就 ...
- UVA - 12545 Bits Equalizer (比特变换器)(贪心)
题意:输入两个等长(长度不超过100)的串S和T,其中S包含字符0,1,?,但T只包含0和1,你的任务是用尽量少的步数把S变成T.有以下3种操作: 1.把S中的0变成1. 2.把S中的“?”变成0或1 ...
随机推荐
- 20155235 2016-2017-2《Java程序设计》课程总结
每周作业链接汇总 预备作业一:学期前作业 预备作业二:技能获取与C语言学习情况 预备作业三:安装虚拟机与Linux的学习 第一周作业:20155235 2006-2007-2 <Java程序设计 ...
- 2017-2018-1 20155306 20155315 《信息安全技术》实验二、Windows口令破解
在网络界,攻击事件发生的频率越来越高,其中相当多的都是由于网站密码泄露的缘故,或是人为因素导致,或是口令遭到破解,所以从某种角度而言,密码的安全问题不仅仅是技术上的问题,更主要的是人的安全意识问题. ...
- 修改Tomcat控制台标题(转)
转载地址:https://blog.csdn.net/chanryma/article/details/46930729 背景:用控制台方式启动Tomcat,控制台的标题默认是"Tomcat ...
- ubuntn 安装软件
安装输入法 一.Ctrl+Alt+T打开终端,输入sudo apt-get install fcitx,安装fcitx插件. 二.打开input method,选择fcitx. 三.打开system ...
- selenium 结合 docker 构建分布式测试环境 (初学者视角)
前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...
- vue route.go 载入刷新
vue route 重新载入刷新: this.$router.go({path : 'path' , query: { param: this.param} })
- python程序设计——面向对象程序设计:继承
继承是为代码复用和设计复用而设计的 在继承关系中,已有的.设计好的类称为父类或基类,新设计的类为子类或派生类 派生类可以继承父类的公有成员,但不能继承其私有成员 如果需要在派生类中调用基类的方法,可以 ...
- WeakHashMap介绍
WeakHashMap简介 WeakHashMap 继承于AbstractMap,实现了Map接口. 和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key ...
- 分布式数据库中间件Mycat百亿级数据存储(转)
此文转自: https://www.jianshu.com/p/9f1347ef75dd 2013年阿里的Cobar在社区使用过程中发现存在一些比较严重的问题,如高并发下的假死,心跳连接的故障,只实现 ...
- redis memcache 比较
Redis与Memcached的区别 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都 ...