#include <iostream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int MAXSIZE = 1024;
char a[MAXSIZE] = { 0 }, b[MAXSIZE] = { 0 };
bool CanContain(char* a, int alast, char* b, int blast) {
int t1 = 0, t2 = 0;
while (alast >= 0 && blast >= 0) {
t1 = a[alast] - '0';
t2 = b[blast] - '0';
if (t1 + t2 > 3) return false;
--alast;
--blast;
}
return true;
}
int GetMinLen(char* a, int alen, char* b, int blen) {
if (alen > blen) return GetMinLen(b, blen, a, alen);
int alast = alen - 1,ret = alen + blen;
for (int i = 0; i < blen; ++i) {
if (CanContain(a, alast, b, i)) {
ret = min(ret, max(blen ,alen + blen - i - 1 ));
if (ret == blen) return ret;
}
}
int blast = blen - 1;
for (int i = alen - 2; i >= 0; --i) {
if (CanContain(a, i, b, blast)) {
ret = min(ret, max(blen, alen + blen - i - 1));
if (ret == blen) return ret;
}
}
return ret;
}
int main()
{
while (scanf("%s%s", a, b) != EOF) {
int alen = strlen(a), blen = strlen(b);
cout << GetMinLen(a, alen, b, blen) <<endl;
}
return 0;
}
习题3-11(uva-1588)
最新推荐文章于 2022-05-24 20:53:05 发布
本文介绍了一种特殊的字符串匹配算法,该算法用于确定两个由数字字符组成的字符串如何通过最小长度的拼接实现有效组合,同时保持其数字之和不超过3的特性。通过对字符串进行前后双向检查,确保了算法的有效性和准确性。
6377

被折叠的 条评论
为什么被折叠?



