Kickdown
题意
给出两个长度分别为n 1 ,n 2 (n 1 ,n 2 ≤100)且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器(如图3-8所示),问能够容纳它们的最短容器长度。
题解
模拟
分别固定其中一个,一步一步移动另一个,并找出结果的最小值
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 1e2 +5;
#define met(a,b) memset(a, b, sizeof(a));
char a[maxn], b[maxn];
int solve(char a[], int len1, char b[], int len2){
int ans = 0, i, j, k;
for(i = 0; i < len1; ++i) {
for(j = 0, k = 0; i + j < len1 && k < len2; ++j,++k){
int t1 = a[i + j] - '0', t2 = b[k] - '0';
if(t1+t2 > 3){
break;
}
}
if(i + j == len1 || k == len2) { ans = max(len1, i + len2); break;}
}
if(i == len1) ans = len1 + len2;
return ans;
}
int main(){
#ifdef _LOCAL
freopen("in.txt","r", stdin);
#endif // _LOCAL
while(scanf("%s%s", a, b) == 2) {
int len1 = strlen(a), len2 = strlen(b);
printf("%d\n", min(solve(a,len1,b,len2), solve(b,len2,a,len1)));
}
return 0;
}