标签:
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=27865
You are given two non-empty strings S and T of equal lengths. S contains the characters `0‘, `1‘ and `?‘, whereas T contains `0‘ and `1‘ only. Your task is to convertS into T in minimum number of moves. In each move, you can
As an example, suppose S = "01??00" and T = "001010". We can transform S into T in 3 moves:
The first line of input is an integer C (C200) that indicates the number of test cases. Each case consists of two lines. The first line is the string S consisting of `0‘, `1‘ and `?‘. The second line is the string T consisting of `0‘ and `1‘. The lengths of the strings won‘t be larger than 100.
For each case, output the case number first followed by the minimum number of moves required to convert S into T. If the transition is impossible,output `-1‘ instead.
3 01??00 001010 01 10 110001 000000
Case 1: 3 Case 2: 1 Case 3: -1
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 int main () 8 { 9 int n,len1,flag=1; 10 char s[110],t[110]; 11 scanf("%d",&n); 12 while (n--) 13 { 14 scanf("%s%s",s,t); 15 len1=strlen(s); 16 //len2=strlen(t); 17 int a,b,c,aa,bb; 18 a=b=c=aa=bb=0; 19 for (int i=0; i<len1; i++) 20 { 21 if (s[i]==‘0‘) 22 a++; 23 else if (s[i]==‘1‘) 24 b++; 25 else 26 c++; 27 } 28 for (int i=0; i<len1; i++) 29 { 30 if (t[i]==‘0‘) 31 aa++; 32 else 33 bb++; 34 } 35 if (b>bb) 36 { 37 printf ("Case %d: -1\n",flag++); 38 continue; 39 } 40 int sum=0; 41 int j; 42 if (s[i]==‘1‘&&t[i]==‘0‘) 43 { 44 for (j=0; j<len1; j++) 45 { 46 if (s[j]==‘0‘&&t[j]==‘1‘) 47 { 48 sum++; 49 s[i]=‘0‘; 50 s[j]=‘1‘; 51 break; 52 } 53 } 54 if (j>=len1) 55 break; 56 57 } 58 } 59 for (int i=0; i<len1; i++) 60 { 61 int j; 62 if (s[i]==‘1‘&&t[i]==‘0‘) 63 { 64 for (j=0; j<len1; j++) 65 { 66 if (s[j]==‘?‘&&t[j]==‘1‘) 67 { 68 sum++; 69 s[i]=‘?‘; 70 s[j]=‘1‘; 71 break; 72 } 73 } 74 if (j>=len1) 75 break; 76 } 77 } 78 for (int i=0; i<len1; i++) 79 { 80 if (s[i]==‘0‘&&t[i]==‘1‘) 81 sum++; 82 //ans=sum+c; 83 } 84 printf ("Case %d: %d\n",flag++,sum+c); 85 } 86 return 0; 87 }
标签:
原文地址:http://www.cnblogs.com/qq-star/p/4674056.html