最近我解决以下problem on codechef:Codechef KCHAR错误的答案
爱丽丝已经与厨师发生争吵最近。所以厨师给艾丽丝一个问题。 最初给你一个空字符串,并允许执行两个操作。
操作-1:每个'a'变成'c',每个'c'变成'a'。例如,“acc”变成“caa”。
操作-2:字符串是相反的。例如,“acc”变成“cca”。厨师给出以下生成方程小号Ñ = S N-1 + “一” +操作-1(操作-2(S N-1))
其中S0 = “” (空字符串)。
爱丽丝容易找出未来数序列:
S1 = “一”
S2 = “AAC”
S3 = “aacaacc”现在厨师要求找到S的第K个字符 LOC,其中LOC = 10 。你需要帮助爱丽丝找到答案。
1≤:T≤100
1≤ķ≤10
我曾尝试使用以下代码来解决该问题:
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&k);
count=0;
while(1)
{
lg=(double)log(k)/log(2);
av=pow(2,lg);
if(av!=k)
{
diff=k-av;
k=av-diff;
count++;
}
else
{
if(count%2==0)
{
printf("a\n");
}
else
{
printf("c\n");
}
break;
}
}
}
什么错误在该溶液中?
我已经尝试了各种输入和我得到正确的答案,但我得到WA时,我提交。任何人都可以提供一些解决方案失败的测试案例。
您是否检查过大k的数值不准确?大k似乎不太可能完全等于pow(2,double(log(k)/ log(2)))'。 –
例如,当k是'1ULL << 29'时 –
是的,即使k = 10^18也给出正确的答案 –