牛牛的刀工练习I(875557) 题解

解法:
考虑到原来的每一块肉最多被切成两块肉,那么原来的第一块肉只有以下两种可能:
1、它是切完之后的第一块肉
2、它被切成了两块肉,那么它的大小是切完之后前两块肉的和
只需要依次判断这两种情况是否可能即可。

bool isOk(vector <int> &A, int x) {
    int cur = 0;
    while (cur < A.size()) {
        if (A[cur] == x) {
            cur++;
        } else if (cur + 1 < A.size() && A[cur] + A[cur + 1] == x) {
            cur += 2;
        } else {
            return false;
        }
    }
    return true;
}
/**
 * 判断能否将肉切成需要的长度
 * @param A int整型vector 牛牛希望得到的最终数组(描述肉的长度)
 * @return bool布尔型
 */
bool CanGetArray(vector<int>& A) {
    return A.size() == 1 || isOk(A, A[0]) || isOk(A, A[0] + A[1]);
}
全部评论

相关推荐

26应届求职ing:你这是报了豆音四哥的班?双非本硕拿这两个项目写简历里投100多家嵌软也没什么面试,感觉项目简单了,很多人用
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务