题解:
第三章计算难题之一。
首先要理清题目,这次给出的两个字符串是不可翻转,怎样转都不行,反正就是往简单方面想就是了。
然后看出字符串长度不长,完全可以枚举所有情况。起始思路为两条串,分别从左边尝试到右边,如:
121和12211
开始:121
12211
结尾: 121
12211
这样最后求出的最短长度就是所求答案。
但是这样超级难写!!!lz想这样写想了很久还是没办法
这时候换个思路
当枚举到
121
12211
的时候为一个点
其次如果之后枚举下去
121
12211
然后交换一下上下顺序就变成了
12211
121
可以说每次定下一个串,然后上面那个串向左移动就行了
代码如下:
#include <bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int main() { // freopen("in.txt","r",stdin); string a,b; int len; while(cin >> a >> b){ int alen = a.size(); int blen = b.size(); len = alen+blen; for(int i = 0; i < alen; i++){ int nlen = alen-i; int minl = min(nlen,blen); //每次都只有minl这么长重合,为什么?思考一下 int ok = 1; for(int j = 0; j < minl; j++){ if(a[i+j]-'0'+b[j]-'0' > 3){ok = 0;break;} } if(ok) len = min(len,blen+alen-minl); } for(int i = 0; i < blen; i++){ int nlen = blen-i; int minl = min(nlen,alen); int ok = 1; for(int j = 0; j < minl; j++){ if(b[i+j]-'0'+a[j]-'0' > 3){ok = 0;break;} } if(ok) len = min(len,blen+alen-minl); } printf("%d\n",len); } return 0; }