Baby Ming and Weight lifting
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 382 Accepted Submission(s): 148
Problem Description
Baby Ming is fond of weight lifting. He has a barbell pole(the weight of which can be ignored) and two different kinds of barbell disks(the weight of which are respectively
a
and
b
), the amount of each one being infinite.
Baby Ming prepare to use this two kinds of barbell disks to make up a new one weighted C
(the barbell must be balanced), he want to know how to do it.
Baby Ming prepare to use this two kinds of barbell disks to make up a new one weighted C
![](https://i-blog.csdnimg.cn/blog_migrate/b4b84567b13ee4486778964422b316b1.jpeg)
Input
In the first line contains a single positive integer
T
, indicating number of test case.
For each test case:
There are three positive integer a,b
, and
C
.
1≤T≤1000,0<a,b,C≤1000,a≠b
For each test case:
There are three positive integer a,b
1≤T≤1000,0<a,b,C≤1000,a≠b
Output
For each test case, if the barbell weighted
C
can’t be made up, print Impossible.
Otherwise, print two numbers to indicating the numbers of a
and
b
barbell disks are needed. (If there are more than one answer, print the answer with minimum
a+b
)
Otherwise, print two numbers to indicating the numbers of a
Sample Input
2 1 2 6 1 4 5
Sample Output
2 2 Impossible
还算是稍微有点坑点的一道题。。。。。细节处理的不好,WA了好几发。。。
首先呢,我们是为了得到最小的a+b的值,所以我们要考虑一个优先问题,优先拿重的一种,就能打到最小的a+b的值。
然后呢,我们知道,奇数的C是不可能让杠铃两边平衡的,直接输出Impossible就行。
最后呢,我们要知道,因为a和b不相等,所以一定是偶数个数出现的。
AC代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<string.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int huan=0;
int tmp;
if(a>b)
{
tmp=a;
a=b;
b=tmp;
huan=1;
}
if(c%2==1)
{
printf("Impossible\n");
continue;
}
int outputa;
int outputb;
int zuixiao=0x1f1f1f1f;
int ok=0;
for(int i=0;i*a<=c;i++)
{
for(int j=0;j*b+i*a<=c;j++)
{
if(i*a+b*j==c)
{
if(i+j<zuixiao&&i%2==0&&j%2==0)
{
zuixiao=i+j;
outputa=i;
outputb=j;
ok=1;
}
}
}
}
if(ok==0)printf("Impossible\n");
if(ok==1&&huan==0)
printf("%d %d\n",outputa,outputb);
if(ok==1&&huan==1)
{
printf("%d %d\n",outputb,outputa);
}
}
}