最近我解決以下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也給出正確的答案 –