牛牛的刀工练习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]);
}
查看20道真题和解析