Kickdown UVa 1588
—————————————————————————
题目:UVa1588
—————————————————————————
思路:先把字符转为数字方便加法判断,先下面不动上面动,反过来再来一次,check是否满足条件,最后取两者较小值作为答案。
Sample Input
2112112112
2212112
12121212
21212121
2211221122
21212
Sample Output
10
8
15
#include<bits/stdc++.h>
#define maxn 105
char a[maxn], b[maxn];
int aa[2*maxn], bb[2*maxn];
using namespace std;
int main(){
while(scanf("%s%s", a, b) == 2) {
int lena = strlen(a);
int lenb = strlen(b);
memset(aa, 0, sizeof(aa));
memset(bb, 0, sizeof(bb));
for(int i = 0; i < lena; i++) {
aa[i] = a[i] - '0';
}
for(int i = 0; i < lenb; i++) {
bb[i] = b[i] - '0';
}
int i, j;
for(i = 0; i < lena; i++) { //下面不动
for(j = 0; j< lenb; j++) {
if(aa[i+j] + bb[j] > 3)
break;
}
if(j == lenb)
break;
}
int ans1 = max(i+lenb,lena);
for(i = 0; i < lenb; i++) { //上面不动
for(j = 0; j< lena; j++) {
if(bb[i+j] + aa[j] > 3)
break;
}
if(j == lena)
break;
}
int ans2 = max(i+lena,lenb);
printf("%d\n", min(ans1,ans2));
}
return 0;
}