有n颗糖果,有L个男生和U个女生。
现在要分配糖果。每个学生至少要分到1个糖果,至多分到100000个糖果。
每个男生分到的糖果数量必须相同。每个女生分到的糖果数量也必须相同。
如果L和U都不为0, 那么每个男生分到的糖果数量必须比每个女生分到的糖果数量要多。
如果按照上述的分配规则,无法分配,那么输出-1;
如果可以分配,那么输出剩下最少的糖果数量(即尽可能的把糖果分配出去,使得剩下的糖果最少)。
输入格式
多组测试数据。
第一行,一个整数G,表示有G组测试数据。1<=G<=10。
每组测试数据格式如下:
第1行,三个整数:n,L,U。 1<=n<=10^12。0<=L<=10^12, 0<=U<=10^12, L+U>0。
输出格式
共G行,每行一个整数。
输入/输出例子1
输入:
10
80 10 10
27 20 10
1234 15 55
1 1 0
9876543210 0 2
1234567 2323 4747
9876543210 47 0
9876543210 987654322 0
98765436210 0 9876543627
37 14 10
输出:
0
-1
4
0
9876343210
44
9871843210
987654312
9876543567
-1
代码:
#include<bits/stdc++.h>
using namespace std;
long long t,n,a,b;
int main(){
cin>>t;
while(t--)
{
cin>>n>>a>>b;
if(a==0)
{
long long nn=n/b;
if(nn>100000)nn=100000;
if(n<b)cout<<"-1";
else cout<<n-nn*b;
}
else if(b==0)
{
long long nn=n/a;
if(nn>100000)nn=100000;
if(n<a)cout<<"-1";
else cout<<n-nn*a;
}
else
{
long long ans=n;
for(int nv=1;nv<=100000;nv++)
{
long long nan=(n-(nv*b))/a;
if(nan>100000)nan=100000;
if(nan>nv)
{
long long t=n-nan*a-nv*b;
if(ans>t)ans=t;
}
}
if(ans==n)cout<<"-1";
else cout<<ans;
}
cout<<endl;
}
return 0;
}