回 帖 发 新 帖 刷新版面

主题:经典题,但还是WA.

各位大哥,我有来了,我在PKU做了一道题:Matches Game(第2234道).
我是看了张一飞先生的 << 由感性认识到理性认识——透析一类搏弈游戏的解答过程>>才做出来的,但提交时还是WA.唉,为什么我老是WA呢?
    诚心请教各位高手指点,谢谢!
下面是原题:
Matches Game 
Time Limit:1000MS  Memory Limit:65536K
Total Submit:873 Accepted:453 
Description
Here is a simple game. In this game, there are several piles of matches and two players. The two player play in turn. In each turn, one can choose a pile and take away arbitrary number of matches from the pile (Of course the number of matches, which is taken away, cannot be zero and cannot be larger than the number of matches in the chosen pile). If after a player’s turn, there is no match left, the player is the winner. Suppose that the two players are all very clear. Your job is to tell whether the player who plays first can win the game or not. 
Input
The input consists of several lines, and in each line there is a test case. At the beginning of a line, there is an integer M (1 <= M <=20), which is the number of piles. Then comes M positive integers, which are not larger than 10,000,000. These M integers represent the number of matches in each pile. 
Output
For each test case, output "Yes" in a single line, if the player who play first will win, otherwise output "No".
Sample Input
2 45 45
3 3 6 9
Sample Output
No
Yes
Source
POJ Monthly,readchild
我的代码是:
#include <stdio.h>

void main()
{
    long a[20];
    long sum=0;
    int m,i;
    while(scanf("%d",&m)==1)
    {
        if(m<1||m>20)
            return;
        for(i=0;i<m;i++)
            scanf("%d",&a[i]);

        for(i=0;i<m;i++)
            if(a[i])
                sum^=a[i];

        printf("%s\n",(sum?"Yes":"No"));
    }

}
希望各位能帮帮忙,再次谢谢!

回复列表 (共8个回复)

沙发

提供的算法不是很简单么?
#include <stdio.h>
int main()
{
    int m, tmp, a, i;
    while(scanf("%d", &m) != EOF){
        for(scanf("%d", &a), i = 2; i <= m; i++){
            scanf("%d", &tmp);
            a ^= tmp;
        }
        printf("%s\n", a ? "Yes" : "No" );
    }
    return 0;
}

板凳

对,算法是简单.但就是提交到PKU时,就WA了,您的算法也WA了,我试了!

3 楼

说话要有根据的……

argentmoon 2234 Accepted 40K 0MS G++ 280B 2007-01-04 21:36:00

4 楼

对不起,是我错了!刚才去PKU看了一下我提交的代码,发现是我的WA了的代码,并不是您的.是在抱歉!唉,太粗心了!呵呵!
    但我还是不明白的是,为什么我的代码就WA了呢?似乎和您的代码相差不远呀!

5 楼

粗心要不得,本来这样的错误你要自己发现才够深刻的

看看你的sum的初始化吧

6 楼

咦,果真!只要我将sum不做初始化,而作为第0项进行输入,在稍微改一下改动,果然就通过了.但为什么不能对sum进行初始化呢?(应该是为什么不能将初始化位0的sum进行位运算?),这一点我着实不明白.以前也没学到关于位运算更深层次的知识,刚才也翻了书本,都没有找到相关知识点,您能为我解析一下吗?谢谢先!

7 楼

上一次的结果影响了下一次的结果,这个应该蛮基本的吧?

8 楼

对对对!唉!我居然糊涂成这样子.连这点错误都发现不了.
唉,路还长着!
再次感谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册