打印值会更改代码的输出

Printing a value changes the output of the code

本文关键字:代码 输出 打印      更新时间:2023-10-16

几个小时前,CodeForces举行了一场比赛,这是比赛的问题之一——

问题C(你不必阅读/解决它来回答问题(

编辑:根据要求在此处添加问题,同样,不一定必须阅读它。

Slastyona和她忠诚的狗Pushok正在玩一个毫无意义的游戏 确实很有意思。

游戏由多个回合组成。它的规则非常简单:在 每一轮,选择一个自然数K。然后,说(或 吠叫(它比另一个赢得回合的速度更快。之后, 胜者的分数乘以K2,失败者的分数为 乘以 k。在游戏开始时,斯拉斯乔纳和 普肖克的分数等于一。

不幸的是,Slastyona失去了她的记事本,所有的历史 记录了n场比赛。她设法回忆起每个的最终结果 虽然游戏,但她对它们的所有记忆都是模糊的。帮助 Slastyona 验证它们的正确性,或者换句话说,对于 每对给定的分数决定了游戏是否可能 以这样的结果结束与否。

输入 在第一个字符串中,游戏数 n (1 ≤ n ≤ 350000( 为 鉴于。

每场比赛由一对分数 a、b (1 ≤ a、b ≤ 10^9( – 相应地,Slastyona和Pushok的结果。

输出 对于每对分数,如果可能,请回答"是" 游戏以给定的分数结束,否则为"否"。

您可以以任意大小写(大写或小写(输出每个字母。

所以我解决了它,比赛结束后,我和我的朋友们正在讨论这些问题,他们问我下面的测试用例的答案是什么——


1 1 1

我在我的IDE(Dev-C++ 5.11(上说它是"是",(因为它应该是(
但是当我们在ideone上运行它时,结果是"否"!

我认为我的代码一定只有问题,所以当我遇到这个问题时,我尝试调试它,

我的代码 -

#include<stdio.h>
using namespace std;
long long int iscube(long long int n)
{
long long int lo = 0;
long long int hi = 1000000;
while(lo < hi)
{
long long int mid = (lo+hi)/2;
if(mid*mid*mid < n)
lo = mid+1;
else
hi = mid;
}
return lo;
}
int main()
{
long long int a,b;
int n;
scanf("%d",&n);
while(n--)
{
scanf("%I64d %I64d",&a,&b);
long long int c = a*b;
long long int cb = iscube(c);
//printf("%lld",cb)
if(cb*cb*cb == c)
{
if(a%cb == 0 && b%cb == 0)
printf("Yesn");
else
printf("Non");
continue;
}
printf("Non");
}
}

当我将输入作为

1  
1 1

在上面的代码中,答案是"否">
但是如果我取消注释main(( 函数中 while 循环中 if 语句上方的行,

答案是"1 是">

(这些输出是我在 ideone 上运行代码时得到的输出,在 Dev-C++ 5.11 上运行时,我按预期得到"是"和"1 是"(

现在,当我在想我的代码力答案将被评估为 WA 时,经过系统测试,它被接受

有没有人知道为什么会出现这个问题?

(另外,如果有的话,有人可以添加适当的标签吗(

打开警告,您的scanf中有未定义的行为:

warning: length modifier 'I64' results in undefined behavior or no effect with 'd' conversion specifier [-Wformat]
scanf("%I64d %I64d",&a,&b);

如果将其更改为scanf("%lld %lld",&a,&b);(C++11(,那么您将定义行为,但是由于您使用的是C++,因此只需使用流:

std::cin >> a >> b;

演示