UVa 112

今天高等(一ㄢˇ)程式(ㄙㄨㄢˋ)設計(ㄈㄚˇ)的助教請我幫忙監考。


上機考,考了一題 UVa。看了網路上的版本,都在 cin, getchar。

其實有種東西叫做 scanf 很好用的。

這題唯一要注意的是 leaf 的定義,要左右支為 nil 才是 leaf,而不是 nil 是 leaf。

還有 不要寫成 res |= go_tree(...) || go_tree(...) || ...
會因為 or 短路特性,可能會少做到後面的 go_tree,會爆。


#include<cstdio>
#define LL long long
bool go_tree(LL tar, LL cur, bool &isNIL){
LL val;
bool res = false, ll = false, rl = false;
if(scanf("\n(%lld", &val)){
res |= go_tree(tar, cur + val, ll);
res |= go_tree(tar, cur + val, rl);
res |= (ll && rl && tar == cur + val);
}
else isNIL = true;
scanf("\n)");
return res;
}
int main(){
bool _;
LL target;
while(~scanf("%lld", &target))
puts(go_tree(target, 0, _) ? "yes" : "no");
return 0;
}
view raw UVa112.cc hosted with ❤ by GitHub

留言

這個網誌中的熱門文章

[Antergos] disable touchpad

活著。