UVA - 1588 Kickdown
2016-07-04 18:00
316 查看
题目大意:给出两个长度不一定相同且每列高度为 1 或 2 的长条,将它们放入一个高度为 3 的容器,求最短容器长度。
解题思路:想到字符串匹配,其中一个长条不动,另一个移动去匹配,高度为 3 则不能同时为 2。这里要考虑的是移动有两个方向,模拟为两种情况:上面的移动下面的不动,即上面的右移;上面的不动下面的动,即上面的左移。取两种中较短的。
解题思路:想到字符串匹配,其中一个长条不动,另一个移动去匹配,高度为 3 则不能同时为 2。这里要考虑的是移动有两个方向,模拟为两种情况:上面的移动下面的不动,即上面的右移;上面的不动下面的动,即上面的左移。取两种中较短的。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char a[105],b[105]; int main() { while(scanf("%s%s", a, b) != EOF) { int tot_a = 0,tot_b = 0, i, j; int len_a = strlen(a),len_b = strlen(b); for (i = 0; i < len_a ; i++) { int tag = 1; for (j = 0; j < len_b && i+j < len_a; j++) if (a[i+j] == '2' && b[j] == '2') { tag = 0; break; } if (tag) break; } tot_a = max(len_a, len_b + i); for (i = 0; i < len_b; i++) { int tag = 1; for (j = 0; j < len_a && i+j < len_b; j++) if (b[i+j] == '2' && a[j] == '2') { tag = 0; break; } if (tag) break; } tot_b = max(len_a + i, len_b); printf("%d\n", min(tot_a, tot_b)); memset (a, 0, sizeof(a)); memset (b, 0, sizeof(b)); } return 0; }
相关文章推荐
- 1.10055 - Hashmat the brave warrior
- 2.10071 - Back to High School Physics
- 3.458 - The Decoder
- 4.694 - The Collatz Sequence
- 6.494 - Kindergarten Counting Game
- 7.490 - Rotating Sentences
- 8.414 - Machined Surfaces
- 9.488 - Triangle Wave
- A.457 - Linear Cellular Automata
- B.489 - Hangman Judge
- C.445 - Marvelous Mazes
- 1.10494 - If We Were a Child Again
- 2.424 - Integer Inquiry
- 3.10250 - The Other Two Trees
- 5.465 - Overflow
- 6.113 - Power of Cryptography
- 7.10161 - Ant on a Chessboard
- 8.621 - Secret Research
- 9.401 - Palindromes
- A.537 - Artificial Intelligence?