uva12545

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 const int maxn =100+10;
 6
 7 char s[maxn],t[maxn];
 8
 9 int  main(){
10     //freopen("10.in", "r", stdin);
11     //freopen("10.out", "w", stdout);
12     int n;
13     cin >> n;
14     for(int i = 1; i <= n; i ++){
15         cin >> s >> t;
16         cout << "Case " << i << ": ";
17         int s1 = 0, t1 = 0, q1 = 0, num = 0;
18         int len = strlen(s);
19         for(int j = 0; j < len; j ++){
20             if(t[j] == ‘0‘) t1 ++;
21             if(s[j] == ‘0‘) s1 ++;
22             if(s[j] == ‘?‘){
23                 q1 ++;
24                 num ++;
25             }
26             if(s[j] == ‘?‘ && t[j] == ‘0‘){
27                 s[j] = ‘0‘;
28                 s1 ++;
29                 q1 --;
30             }
31         }
32         if(s1 + q1 < t1){
33             cout << "-1" << endl;
34             continue;
35         }
36         int sum = t1 - s1;
37         int s0 = 0, s2 = 0;
38         for(int k = 0; k < len; k ++){
39             if(s[k] == ‘0‘ && t[k] == ‘1‘) s0++;
40         }
41         if(sum > 0){
42             s0 += sum;
43         }
44         num += s0;
45         cout << num << endl;
46     }
47     return 0;
48 }  

有本事打开啊!!!

时间: 2024-10-13 13:48:54

uva12545的相关文章

UVa12545 Bits Equalizer (贪心)

链接:http://bak2.vjudge.net/problem/UVA-12545 分析:贪心乱搞. 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 5 const int maxn = 100 + 5; 6 7 char s[maxn], t[maxn]; 8 9 int main() { 10 int T; 11 scanf("%d", &T); 12 for (

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中不同的数字,计算出还要再

UVA12545(比特转换器)。

贪心的思想,如果S串是1而t串是0,只能够交换.除去相同的部分,如果上面的1比下面的1多,就无法变换成功,输出-1. 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 const int maxn = 100+10; 5 int main() 6 { 7 char s[maxn],t[maxn]; 8 int x,i,j,kase = 0; 9 cin >> x; 10 while(x--) 11 { 12 int sum

UVa 12545 比特变换器

https://vjudge.net/problem/UVA-12545 题意:输入两个等长的串S和T,其中S包含字符0,1,?,但T只包含0和1. 用尽量少的步数把S变成T.每步有3种操作: ①把S中的0变成1:②把S中的“?”变成0或者1:交换S中任意两个字符. 思路:题目不是很难.首先考虑交换,然后再看有多少不同的,就需要再加上多少次. 1 #include<string> 2 #include<iostream> 3 #include<algorithm> 4