?? pku2645.cpp
字號:
#include <stdio.h>
typedef long long llong;
llong v[50002];
llong a, b;
llong Gcd(llong a, llong b)
{
return b == 0 ? a : Gcd(b,a%b);
}
void init()
{
llong i;
for (i = 0; i <= 50001; i++)
v[i] = i * (i - 1) / 2;
}
int find(llong key)
{
int low, high, mid;
low = 0;
high = 50001;
while (low <= high)
{
mid = (low + high) / 2;
if (v[mid] == key)
return mid;
if (v[mid] < key)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
void Solve()
{
int i, pos;
llong gcd, tmp;
gcd = Gcd(b,a);
a /= gcd;
b /= gcd;
if (a == 0)
{
printf("0 2\n");
return;
}
else if (a == b)
{
printf("2 0\n");
return;
}
for (i = 2; i < 50001; i++)
{
if (v[i] % b != 0)
continue;
tmp = v[i] / b * a;
pos = find(tmp);
if (pos > 0)
{
printf("%d %d\n", pos, i - pos);
return;
}
}
printf("impossible\n");
}
int main()
{
init();
while (EOF != scanf("%I64d%I64d", &a, &b) && (a||b))
Solve();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -