谁主张、谁举证 ACM crashing balloon / zoj 1003

题目详情可以参考这里:
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3

ZOJ上的判定标准是:
b不服,站出来质疑;
如果a能举证说:你瞧,存在一种合理的解释,a = a[1]*a[2]*…*a[n],  b = b[1]*b[2]*…*b[m]; 其中 2<= a[i], b[j] <=100, 且 a[i] !=b[j] if i!=j
就判断a赢,否则b赢

但是,这里会有对b不利的冤案!例如b踩了气球4和8,于是b = 32 而 a吹牛说自己得了44分,
b不服,但是a狡猾的说,你看,a = 4*11, b=2*16,于是a赢了!b虽然说了实话,a说了假话,
但是仍然b输了。所以我觉得,这道题目应该是按照:谁主张,谁举证的原则来判决。
既然b主张,那么此时法官应该问b,你踩了哪些气球,b当然可以诬告,但是b此时必须说出一种分解,如果b不能分解,那么显然
是诬告,法官不用问a,就判断a赢;
但是针对b说的任意(arbitrary)分解,如果a不能给出一种合理的解释,此时法官就可以判断b赢,否则判断a赢。针对我说的谁主张,谁举证的原则,我给以下Python、Haskell和ANSI C程序,他们都不能通过ZOJ,但是我认为他们依然有价值。同时能通过ZOJ的程序也一并给出。

(另:所有程序本质都是深度优先搜索法,使用显示递归)

程序1,Python:

https://github.com/liuxinyu95/AlgoXY/blob/algoxy/others/problems/search/DFS/ACM/crashing-balloon/solve.py
程序2, Haskell,谁主张,谁举证:

https://github.com/liuxinyu95/AlgoXY/blob/algoxy/others/problems/search/DFS/ACM/crashing-balloon/Solve.hs

程序3,ANSI C:

https://github.com/liuxinyu95/AlgoXY/blob/algoxy/others/problems/search/DFS/ACM/crashing-balloon/solve.c
Like

你可能感兴趣的:(c,python,haskell,ACM,DFS)