uva12545 比特变换器(贪心)
uva12545 比特变换器(贪心)
输入两个等长的串S,T(长度小于100),其中S包含字符0,1,?,T中包含0和1。有三种操作:将S中的0变为1,?变为0或1,交换S中的任意两个字符。求将S变成T的最少步数。
首先考虑去掉问号。设S中1的个数为one1,T中1的个数为one2。在one1<one2的前提下,肯定是把问号填成与T中相同的数字更优。如果one1=one2,那么问号中只能填0。接着就是考虑将0变成1,相同的思路即可。最后等到one1=one2,统计S和T中不同的数字,计算出还要再走几步即可。
#include <cstdio>
#include <cstring>
using namespace std;
const int maxl=105;
int T, l1, l2, one1, one2, step;
char s1[maxl], s2[maxl];
int main(){
scanf("%d", &T);
for (int it=1; it<=T; ++it){
scanf("%s%s", s1, s2);
one1=one2=step=0; int tmp=0;
l1=strlen(s1); l2=strlen(s2);
for (int i=0; i<l1; ++i)
if (s1[i]=='1') ++one1;
for (int i=0; i<l2; ++i)
if (s2[i]=='1') ++one2;
if (l1!=l2||one1>one2){
printf("Case %d: -1\n", it);
continue; }
for (int i=0; i<l1; ++i)
if (s1[i]=='?'){ //用贪心法去除所有问号
s1[i]=s2[i];
if (s1[i]=='1') ++one1;
if (one1>one2) --one1, s1[i]='0';\
++step;
}
for (int i=0; i<l1; ++i) //用贪心法化0为1
if (one1<one2&&s1[i]=='0'&&s2[i]=='1'){
++one1; s1[i]='1'; ++step;
}
for (int i=0; i<l1; ++i) //统计不同之处
if (s1[i]!=s2[i]) ++tmp;
step+=tmp/2; //这是由于只有0和1
printf("Case %d: %d\n", it, step);
}
return 0;
}
uva12545 比特变换器(贪心)的更多相关文章
- UVA - 12545 Bits Equalizer (比特变换器)(贪心)
题意:输入两个等长(长度不超过100)的串S和T,其中S包含字符0,1,?,但T只包含0和1,你的任务是用尽量少的步数把S变成T.有以下3种操作: 1.把S中的0变成1. 2.把S中的“?”变成0或1 ...
- UVa 12545 比特变换器
https://vjudge.net/problem/UVA-12545 题意:输入两个等长的串S和T,其中S包含字符0,1,?,但T只包含0和1. 用尽量少的步数把S变成T.每步有3种操作: ①把S ...
- 使用C#处理基于比特流的数据
使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
随机推荐
- cookie的默认有效目录
php的setcookie是设置cookie操作的函数. 基本参数百度就有一堆答案.其中第四个参数是cookie的有效目录.这个参数是可选的,如果没有设置这个参数.默认 的有效范围是当前目录及其子目录 ...
- selenium-查看selenium API
pydoc是Python自带的模块,主要用于从python模块中自动生成文档,这些文档可以基于文本呈现的.也可以生成WEB 页面的,还可以在服务器上以浏览器的方式呈现! 一.pydoc 1.到底什么是 ...
- 关于MFC消息的总结
一.MFC的消息类型 MFC的消息类型大致可以分为三种: 1.命令消息.由菜单和工具栏或快捷键产生,以WM_COMMAND形式发出(以WM_COMMAND发出的还有很多控件,如Button等,但它们产 ...
- FFMPEG 最简滤镜filter使用实例(实现视频缩放,裁剪,水印等)
FFMPEG官网给出了FFMPEG 滤镜使用的实例,它是将视频中的像素点替换成字符,然后从终端输出.我在该实例的基础上稍微的做了修改,使它能够保存滤镜处理过后的文件.在上代码之前先明白几个概念: Fi ...
- bzoj 3165: [Heoi2013]Segment 线段树
题目: Description 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第i条被插入的线段的标号为i. 给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. ...
- POJ2420:A Star not A Tree?
我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html 我对爬山的理解:https://www.cnblogs.com/AKMer/p/95552 ...
- Wireshark抓取本地Tcp包(任何数据包)
没有任何一个程序员在做项目的时候不会遇到网络编程的问题,要解决这些问题除了对各种网络协议深入了解之外,还需要掌握各种网络分析工具的用法,不用多说wireshark绝对是这方面的翘楚,可惜的是,wire ...
- java基础知识(10)---包
包:定义包用package关键字. 1:对类文件进行分类管理. 2:给类文件提供多层名称空间. 如果生成的包不在当前目录下,需要最好执行classpath,将包所在父目录定义到classpath变量中 ...
- 与input有关的一些操作
单选 : 通过name指定为一组,只能选择一个 一组一个选项 <input type=" name="sex"/>男 <input type=&quo ...
- 问题:HttpWebRequest request post 传参; 结果:好用的C# HttpWebRequest用Post同时提交参数和文件的封装类
在项目中,本来都是在站内进行数据交互的,后来又加进来一个买的php网站(艹).需要进行数据交互,在没有考虑使用web服务的情况下,只有通过Post提交到页面进行数据交互是最好的方式了. 我这边使用的是 ...