牛客小白月赛76 A加B,A模B(数学)

给出两个整数 nnn 和 mmm,请你找出两个整数 aaa 和 bbb,并且 aaa 和 bbb 需要同时满足以下条件:

  •  {a+b=na mod b=m\begin{cases} a+b=n \\ a\ \text{mod}\ b=m \end{cases}{a+b=na mod b=m​
  •  0≤a≤109,1≤b≤1090\leq a\leq 10^9,1\leq b\leq 10^90≤a≤109,1≤b≤109

其中,mod\text{mod}mod 代表计算两个数相除后的余数,例如 10 mod 3=1,4 mod 2=010\ \text{mod}\ 3=1, 4\ \text{mod}\ 2=010 mod 3=1,4 mod 2=0。

如果找不到合法的 aaa 和 bbb,输出 −1-1−1;否则请输出你找到的 aaa 和 bbb。如果有多个可行的答案,请输出任意一个。

输入描述:

第一行包含一个整数 T(1≤T≤2⋅105),表示测试用例的组数。

对于每组测试用例:

仅输入一行,包含两个整数 n,m (0≤n,m≤109)。

输出描述:

对于每组测试用例:

仅输出一行。如果找不到合法的 aaa 和 bbb,输出 −1-1−1;否则请输出两个整数 aaa 和 bbb。如果有多个可行的答案,请输出任意一个。

示例1

输入

2
6 2
1 1

输出

2 4
-1

由题意知:

a=b*k+m,b>m,k>=0

因为a+b=n,所以n=b*(k+1)+m

即n>2*m时有解

且我们a=m,b=n-m可为一组解

#include
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m;
        cin>>n>>m;
        if(n>2*m)
            cout<

你可能感兴趣的:(算法,c++)