Sample Input
3
2 1
4 1
3 4
Sample Output
1
0
55899
需要注意,当 a>2×b以及 5×a<b时,不可构造,输出
#include <bits/stdc++.h>
typedef long long LL;
using namespace std;
int GCD(int a,int b)
{
if(b == 0) return a;
else GCD(b, a % b);
}
int t;
int a, b;
int ans[10000];//wa了好几次发现结果数组开小了
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&a,&b);
memset(ans,0,sizeof(ans));
if(2 * b < a|| 5 * a < b) //特殊处理
printf("0\n");
else
{
int l = 2 * b - a;
int sn = 9 * b;
int x = GCD(l, sn);
l /= x, sn /= x;
for(int i = 1;i <= l;i++)//>=5的只有l个
ans[i] = 5;
sn -= (5*l);
int k = l;
for(int i = 1;i <= l;i++)
{
int v = min(sn ,4);
ans[i] += v;
sn -= v;
}
while(sn)//l全为9后sn还剩余则加到l个外面
{
int v = min(sn ,4);
ans[++k] += v;
sn -= v;
}
for(int i = k;i > 0;i--)//倒着输出
{
printf("%d",ans[i]);
}
printf("\n");
}
}
}
if(b == 0) return a;
else GCD(b, a % b);
}
int t;
int a, b;
int ans[10000];//wa了好几次发现结果数组开小了
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&a,&b);
memset(ans,0,sizeof(ans));
if(2 * b < a|| 5 * a < b) //特殊处理
printf("0\n");
else
{
int l = 2 * b - a;
int sn = 9 * b;
int x = GCD(l, sn);
l /= x, sn /= x;
for(int i = 1;i <= l;i++)//>=5的只有l个
ans[i] = 5;
sn -= (5*l);
int k = l;
for(int i = 1;i <= l;i++)
{
int v = min(sn ,4);
ans[i] += v;
sn -= v;
}
while(sn)//l全为9后sn还剩余则加到l个外面
{
int v = min(sn ,4);
ans[++k] += v;
sn -= v;
}
for(int i = k;i > 0;i--)//倒着输出
{
printf("%d",ans[i]);
}
printf("\n");
}
}
}
需要注意,当 a>2×ba>2×b 以及 5×a<b5×a<b 时,不可构造,输出