我正在解决一个问题。但我缺少一些东西。我的解决方案有一些测试用例是错误的。我需要找到该测试用例。
对于另一个子任务,就是说执行花费了太长时间。
如果厨师的知识和能力分别等于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/