#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string>
unsigned int N, Sp, Sq, A_min, B_min;
//1<= N <=2^20是P,Q兩個數組的元素個數,1 <= Sq,Sp <= 2^10分別是兩個數組每一個元素所佔字節大小,因此兩個數組分別最大佔2^30字節
unsigned long long Qofs, Pofs, K;
//由公式偏移能夠知道Pofs原來多是2^30,先向左偏移會越界,因此選用一個較大的數據類型來存放
//重點:Qofs按照格式能夠知道偏移量是同Pofs同樣遞增,並且按照題目所說,使用偏移公式,Q數組能夠不連續,並且不會重疊
//由於Pofs最大30位,因此偏移不會超過30位,所以最大不會超過60位
void main()
{
FILE* fp = freopen("data9.in", "r", stdin);
freopen("data9.out", "w", stdout);
while (!feof(fp))
{
scanf("%d %d %d", &N, &Sp, &Sq);
K = 0xffffffffffffffff,A_min = B_min = 32; //64位
Pofs = (N-1)*Sp; //直接是P數組最大偏移值去獲取Q數組最大偏移值,從而獲取K最小值
for (int A = 0; A < 32; A++)
{
for (int B = 0; B < 32;B++)
{
Qofs = (Pofs + (Pofs << A) >> B)+Sq; //按照上面文章所說,書上公式是錯誤的額,這個公式是對的 if (Qofs < K && Qofs >= N*Sq) //找到的第一個最小K,獲取的A,B就是最小的,咱們不須要設置<=k去判斷後面的AB值,沒有必要
{
K = Qofs;
A_min = A;
B_min = B;
}
}
}
printf("%llu %u %u\n", K, A_min, B_min);
getchar();
}
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}