题目大衣:就是给定两个数a,b问能不能组成c,能就输出a+b数量的最小值否则就是Impossible
思路:枚举时必须是(tmp+t)*2==c最后两值同乘以2,否则(tmp+t)==c的话不一定保证两边的重量相同虽然最后的总质量都为C 。
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<iostream>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std;
int main(){
int n,m,i,j,k;
scanf("%d",&n);
while(n--){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if( c&1 )
{
printf("Impossible\n");continue;
}
bool bj=false;
int x=2000,y=2000;
for(i=0;i<=c;i++){
int tmp=i*a;
if(tmp > c) break;
for(j=0;j<=c;j++){
int t=j*b;
if(t > c) break;
if( (t+tmp)*2==c ){
if((x+y)>(i+j)){
x=i,y=j;
}
bj=true;
}
}
}
if(bj)
printf("%d %d\n",x*2,y*2);
else
printf("Impossible\n");
}
}