UVA - 12545 Bits Equalizer (贪心)
来源:互联网 发布:主机屋数据库地址 编辑:程序博客网 时间:2024/05/16 07:41
题意:
给出两个字符串 S和T ,S中只含0,1,?,T中只含0,1 要求对S操作把S转换成T,规则如下:
1.0 ->1
2.任意位置两两交换
3.?->0或1
求最少步数,如果无法转换输出-1
对于S与T的不对应情况,能很直观的分为四类,01 10 1? 0?,由于交换能够使步数减少,01 和 10必然要先交换,交换之后如果只剩下01,那么剩下的不对应个数累加就直接是答案,否则再考虑?->0继续产生匹配减少个数累加判断结果
#include<cstring>#include<string>#include<iostream>#include<queue>#include<cstdio>#include<algorithm>#include<map>#include<cstdlib>#include<cmath>#include<vector>//#pragma comment(linker, "/STACK:1024000000,1024000000");using namespace std;#define INF 0x3f3f3f3fchar s1[205];char s2[205];int a01,a10,ax1,ax0;int main(){ int ca=1; int T; scanf("%d",&T); while(T--) { a01=a10=ax1=ax0=0; scanf("%s%s",s1,s2); int len=strlen(s1); for(int i=0;i<len;i++) { if(s1[i]!=s2[i]) { if(s1[i]=='?') { if(s2[i]=='0') ax0++; else ax1++; } else if(s1[i]=='0') a01++; else a10++; } } int ans=0; ans+=min(a01,a10); a01-=ans; a10-=ans; int flag=0; if(a01) { ans+=a01; } else if(a10) { if(ax1>=a10) { ans+=2*a10; ax1-=a10; } else flag=1; } ans+=ax1; ans+=ax0; printf("Case %d: ",ca++); if(!flag) printf("%d",ans); else printf("-1"); puts(""); } return 0;}
0 0
- UVA 12545 Bits Equalizer(模拟+贪心)
- UVa 12545 - Bits Equalizer(贪心)
- UVa:12545 Bits Equalizer(贪心)
- UVA - 12545 Bits Equalizer (贪心)
- UVA - 12545 Bits Equalizer 贪心
- uva 12545 Bits Equalizer(贪心)
- 习题8-3 UVA - 12545 Bits Equalizer(贪心)
- UVA 12545 Bits Equalizer(瞎搞 贪心)
- UVa 12545 Bits Equalizer——贪心
- 12545-Bits Equalizer贪心
- 12545 - Bits Equalizer(贪心?)
- Uva - 12545 - Bits Equalizer
- uva 12545Bits Equalizer
- uva 12545 - Bits Equalizer
- UVA 12545 - Bits Equalizer
- UVA 12545 Bits Equalizer
- uva 12545 - Bits Equalizer(比特变化器)
- uva 12545 Bits Equalizer (SWERC 2012) 贪心 分析
- block为什么要用Copy修饰
- 线程锁笔记
- Apriori算法实现
- 正则表达式的JS验证
- 《深入理解计算机系统》阅读笔记二
- UVA - 12545 Bits Equalizer (贪心)
- 360杀软检测机制猜想
- mysql-5.7.14-winx64.zip 非安装版的详细安装方式
- 前端在线编程笔试记录——蛇形数字
- 如何树立威信?
- Android Studio常用插件
- python script 编写摘要(一)
- linux 下C++调用python返回值(python.so)
- lintcode-带环链表