SYNC13C SPOJ错误答案

时间:2014-01-22 10:49:17

标签: c algorithm

Link to challenge

  

Ramesh和Suresh在每个彩票上都有一个装满五颗星的盒子。以来   两盒都不需要相同数量的巧克力   决定玩游戏。获胜者将拥有两个方框   巧克力。他们交替出场,Suresh开始比赛。特定   两个盒子里的巧克力数量,让它们分别为c1和c2   玩家可以获得c1或c2个巧克力并分割   剩下一盒巧克力到两个盒子里(这两个盒子不需要   拥有相同数量的巧克力)。谁不能做这样的球员   移动输了。输入

     

第一行输入包含数字T(1 <= T <= 1000),数量为   测试用例。然后跟随T行,每行包含两个空格分隔   整数c1和c2

     

(1 << = C1&LT; = C2&LT; = 10000)。

     

输出对于每个测试用例打印“Ramesh”或“Suresh”取决于谁   是赢家。

     

输入:2 3 1 4 5

     

输出:Ramesh Suresh

这是我的尝试,这给了我错误的答案。再给我一些测试用例。

#include<stdio.h>
int main()
{
    int t,c1,c2,max,count,min;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&c1,&c2);
        min=c1<c2?c1:c2;  
        max=c1>c2?c1:c2;
        if(max%2!=0 && min%2!=0) 
            printf("Ramesh\n");
        else if(min%2==0 && max%2!=0)
            printf("Suresh\n");
        else if(max%2==0 && min%2!=0)
            printf("Ramesh\n");  
        else printf("Suresh\n");
    }
    return 0; 
}

2 个答案:

答案 0 :(得分:3)

代码比这简单得多。首先,让我解释一下算法。

W成为数组,

W[i] = 1 if the user wins by choosing to split the box of i chocolates and 0 if he looses.

让我们构造这个数组,我们将得到一个模式。

W[1] = 0, since one can't split the box of one chocolate.

对于所有i>1,我们有:

  

W[i] = 1如果存在整数ab,则a+b=iW[a]=W[b]=00

上述声明暗示,为了让用户通过选择i巧克力盒赢得胜利,他需要确保,无论他选择何种方框,他的对手都会失败。他的对手失败意味着W[a]=W[b]=0a+b=i

如果我们尝试填充这个数组,我们就会得到,

  

W:1 2 3 4 5 6 7 ...

     

val:0 1 0 1 0 1 0 ...

这意味着如果给定的整数是even,那么suresh将获胜。如果它们都是odd,则意味着ramesh会赢。

希望我很清楚。

答案 1 :(得分:0)

#include<stdio.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
       int a,b;
       scanf("%d%d",&a,&b);
       if(a%2==1 && b%2==1)
           printf("Ramesh\n");
       else
           printf("Suresh\n");
    }    
    return 0;
}