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(the barbell must be balanced), he want to know how to do it.
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, and C.
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 and b barbell disks are needed. (If there are more than one answer, print the answer with minimum a+b)
Sample Input
2
1 2 6
1 4 5
Sample Output
2 2
Impossible
Source
直接暴力枚举
AC代码:
1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<math.h> 7 #include<algorithm> 8 #include<queue> 9 #include<set> 10 #include<bitset> 11 #include<map> 12 #include<vector> 13 #include<stdlib.h> 14 using namespace std; 15 #define ll long long 16 #define eps 1e-10 17 #define MOD 1000000007 18 #define N 1000000 19 #define inf 1e12 20 int a,b,c; 21 int main() 22 { 23 int t; 24 scanf("%d",&t); 25 while(t--){ 26 scanf("%d%d%d",&a,&b,&c); 27 if(c&1){ 28 printf("Impossible "); 29 continue; 30 } 31 int half = c/2; 32 33 int ans = 10000000; 34 int ans1,ans2; 35 for(int i=0;i<=1001;i++){ 36 for(int j=0;j<=1001;j++){ 37 int cnt = i*a + j*b; 38 if(cnt==half){ 39 if(ans>i+j){ 40 ans=min(ans,i+j); 41 ans1=i,ans2=j; 42 } 43 } 44 } 45 } 46 if(ans==10000000){ 47 printf("Impossible "); 48 continue; 49 } 50 printf("%d %d ",ans1*2,ans2*2); 51 } 52 return 0; 53 }