下面是能 AC 的代码:
bool solve(int &W) {
int W1, D1, W2, D2;
bool b1 = true, b2 = true;
std::cin >> W1 >> D1 >> W2 >> D2;
if(!W1) b1 = solve(W1);
if(!W2) b2 = solve(W2);
W = W1 + W2;
return b1 && b2 && (W1 * D1 == W2 * D2);
}
我在想,反正假如看到一个地方不平衡,那么肯定整个天平都不平衡了啊,于是我为了减少递归次数,修改成如下代码:
bool solve(int &W) {
int W1, D1, W2, D2;
std::cin >> W1 >> D1 >> W2 >> D2;
if(!W1) if(!solve(W1)) return false;
if(!W2) if(!solve(W2)) return false;
W = W1 + W2;
return W1 * D1 == W2 * D2;
}
结果换回来一堆 WA...很难受。_(:з」∠)_
自己脑子不够用,实在没想出来哪里出了问题。因此想来问问各位大牛们,这么改的不可行性究竟在哪里?