我正在解决一个问题。但我缺少一些东西。我的解决方案有一些测试用例是错误的。我需要找到该测试用例。
对于另一个子任务,就是说执行花费了太长时间。


  如果厨师的知识和能力分别等于N和M,则他将可以使用“话语”。最初,他有权力
  1和知识1。
  
  厨师可以执行以下几种操作来提高其技能:
  
  
  解决问题—用X增加他的知识
  俯卧撑—将他的力量提高Y
  安装ShareChat与朋友保持联系-将知识和能力提高1
  
  
  Chef最多只能安装一次ShareChat。其余动作可以执行任意次,并且动作可以是
  以任何顺序执行。
  
  帮助厨师找出是否有可能从讨论转移到话语。
  
  输入值
  
  输入的第一行包含一个整数T,表示测试用例的数量。 T测试用例的描述如下。
  
  每个测试用例的第一行也是唯一一行包含四个以空格分隔的整数N,M,X和Y。
  
  输出量
  
  对于每个测试用例,如果有可能达到要求的知识,则打印包含字符串“ Chefirnemo”的一行
  电源或“ Pofik”(如果不可能)


您也可以访问此链接阅读问题
链接到问题https://www.codechef.com/SEPT18B/problems/CHEFADV
我的解决方案

#include<stdio.h>
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            long int n,m,x,y,power,know;
            scanf("%ld%ld%ld%ld",&n,&m,&x,&y);
            power=1;
            know=1;
            if(power+1==m && know+1==n)
                printf("Chefirnemo\n");
            else {
                while(power+y<m)
                    power=power+y;
                if(power+y==m)
                    power=power+y;
                while(know+x<n)
                    know=know+x;
                if(know+x==n)
                    know=know+x;
                if(power==m && know==n)
                    printf("Chefirnemo\n");
                else if(power+1==m && know+1==n)
                    printf("Chefirnemo\n");
                else
                    printf("Pofik\n");
            }
        }
        return 0;
    }

最佳答案

如果x==1(m-1)%y==1或反之亦然(即y==1(n-1)%x==1),您的代码将失败。然后,在安装ShareChat无法解决问题时,您的迭代过程会将power增加到n,将know增加到m-1。但是,如果仅将power增加到n-1,则安装ShareChat会获得匹配。

正确的解决方案应更加谨慎地对待ShareChat的安装。例如

bool chefirnemo(int n, int m, int x, int y)
{
    // 0 check that input is okay
    assert(1<=n && 1<=m && 1<=x && 1<=y);
    // 1 change to the equivalent problem where power
    //   and knowledge are 0 initially
    --n; --m;
    // 2 try w/o installation of ShareChat:
    if (n>=0 && (n%x)==0 && m>=0 && (m%y)==0)
        return true;
    // 3 install ShareChat
    --n; --m;
    // 4 try again
    return (n>=0 && (n%x)==0 && m>=0 && (m%y)==0);
}

关于c - 我缺少哪个测试用例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52236624/

10-11 19:39