Kickdown

Time Limit: Unknown Memory Limit: Unknown
Total Submission(s): Unknown Accepted Submission(s): Unknown

UVa 1588
UVa 1588


https://uva.onlinejudge.org/i...

Accepted Code

// Author : Weihao Long
// Created : 2017/12/21

#include "stdio.h"
#include "string.h"

#define MAX 220

int main() {
    char a[MAX], b[MAX];
    memset(a, '0', sizeof(a));
    memset(b, '0', sizeof(b));
    int ans1, ans2;
    while (scanf("%s%s", &a, &b) != EOF) {
        int lena = strlen(a), lenb = strlen(b), flag = 0;
        for (int i = 0; i <= lena; i++) {
            int tag = 1;
            for (int k = i, kk = 0; k < lenb + i; k++, kk++) {
                if (a[k] + b[kk] - '0' > '3') {
                    tag = 0;
                    break;
                }
            }
            if (tag) {
                flag = i;
                break;
            }
        }
        ans1 = lenb + flag;
        if (ans1 < lena)
            ans1 = lena;
        for (int i = 0; i <= lenb; i++) {
            int tag = 1;
            for (int k = i, kk = 0; k < lena + i; k++, kk++) {
                if (b[k] + a[kk] - '0' > '3') {
                    tag = 0;
                    break;
                }
            }
            if (tag) {
                flag = i;
                break;
            }
        }
        ans2 = lena + flag;
        if (ans2 < lenb)
            ans2 = lenb;
        printf("%d\n", ans1 < ans2 ? ans1 : ans2);
        memset(a, '0', sizeof(a));
        memset(b, '0', sizeof(b));
    }
    return 0;
}

Notes

题意:
给出两个长条,且每列高度只能为 '1' 或 '2',需要将它们放入一个高度为 '3' 的容器,问能容纳它们的最短容器长度。
(注意不能翻转或旋转)

思路:
把两条的头对齐,定其中一条挪动另外一条,挪到满足题目要求为止。
然后互换位置再来一次,比较两个答案,取小的。

感受:
读题不仔细,先做的时候以为可以翻转,做麻烦了不说,还提交错误。


龙威昊
4 声望5 粉丝