[UVA12545]Bits Equalizer[贪心]
2015-08-01 21:55
274 查看
题目链接:[UVA12545]Bits Equalizer[贪心]
题意分析:可以进行三种操作。一、将0变成1;二、将问号变成0或者1;三、交换两个字符;用最少的步骤将S串变成T串。不行就输出-1。
解题思路:首先根据题意,既然0能变1,问号能变任何。那么不能变成T串的情况只能是S串中的1大于T串中1的个数。(因为减不掉)
然后考虑能够成为T串的情况。首先,不相同的0和不相同的1首先进行置换,因为这样置换只需进行一次操作,比其它任何情况都优。其次呢,这时剩下的就只剩问号和剩余的1或者0没有被处理掉(0和1那个多就剩哪个)。那么这时剩两种情况:1、可见的都是1。这时必定是拿问号进行置换,每次要两个操作(问号个数肯定等于1的个数,可以想想:));2、可见的都是0。这时必定是拿0变1,一次操作,然后问号变成要变成的那个。
个人感受:很神奇地AC了。这段解析还是现在慢慢想出来的XD。当时没注意0能变1wa了一发。
具体代码如下:
题意分析:可以进行三种操作。一、将0变成1;二、将问号变成0或者1;三、交换两个字符;用最少的步骤将S串变成T串。不行就输出-1。
解题思路:首先根据题意,既然0能变1,问号能变任何。那么不能变成T串的情况只能是S串中的1大于T串中1的个数。(因为减不掉)
然后考虑能够成为T串的情况。首先,不相同的0和不相同的1首先进行置换,因为这样置换只需进行一次操作,比其它任何情况都优。其次呢,这时剩下的就只剩问号和剩余的1或者0没有被处理掉(0和1那个多就剩哪个)。那么这时剩两种情况:1、可见的都是1。这时必定是拿问号进行置换,每次要两个操作(问号个数肯定等于1的个数,可以想想:));2、可见的都是0。这时必定是拿0变1,一次操作,然后问号变成要变成的那个。
个人感受:很神奇地AC了。这段解析还是现在慢慢想出来的XD。当时没注意0能变1wa了一发。
具体代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; const int MAXN = 111; char s[MAXN], t[MAXN]; int main() { int k; scanf("%d", &k); for( int kase = 1; kase <= k; ++kase ) { printf("Case %d: ", kase); scanf("%s%s", s, t); int s1 = 0, t1 = 0, len = strlen(s), diff0 = 0, diff1 = 0, que = 0; for(int i = 0; i < len; ++i) //统计s串、t串中1、0出现的次数等 { if(s[i] == '1') ++s1; if(t[i] == '1') ++t1; if(s[i] == '?') ++que; if(s[i] != t[i] && s[i] == '0') ++diff0; if(s[i] != t[i] && s[i] == '1') ++diff1; } if(s1 > t1) printf("-1\n"); else //根据上文,不管是全剩1还是全剩0最终都是要进行每个两次操作。 最后的que-(diff0 - diff1)代表剩余的问号要进行的操作 { if(diff0 < diff1) swap(diff0, diff1); printf("%d\n", diff1 + (diff0 - diff1) * 2 + que - (diff0 - diff1)); } } return 0; }
相关文章推荐
- MapReduce实现QQ好友推荐
- 说反话(c++实现)
- Apache+Tomcat
- 说反话(c++实现)
- Date,Calendar,SimpleDateFormat的使用
- CentOS安装tomcat
- WPF编程:运算符“==”无法应用于“System.window.Forms.DialogResult”和“bool”类型操作数
- hadoop安装笔记
- 【转】全Javascript的Web开发架构:MEAN和Yeoman【译】
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- JavaScript的基本数据类型
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- 数值计算学习笔记
- python ,__set__, __get__ 等解释
- ZOJ-1243(parse URL)
- Day8.01
- 用objective-c开发的第一个mac程序(1)——依赖库的生成
- 校园暑期的操场
- C#中Using用法
- 【转】什么是全栈工程师【译】