HDU 5610: Baby Ming and Weight lifting

Baby Ming and Weight lifting

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 136    Accepted Submission(s): 57


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.

 

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 .

1T1000,0<a,b,C1000,ab
 

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 )
 

Sample Input
  
  
2 1 2 6 1 4 5
 

Sample Output
  
  
2 2 Impossible
 

首先,C如果是奇数肯定Impossible,然后就枚举咯。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
    int t, a, b, c, d;
    scanf("%d", &t);
        while(t--){
            scanf("%d%d%d", &a, &b, &c);
            if(c%2) printf("Impossible\n");
            else {
                c /= 2;
                if(a>b) {
//                    if(c%a==0) printf("%d 0\n", 2*c/a);
//                    else if(c%a%b) {
                d = 0;
//                        if(c%b) printf("Impossible\n");
//                        else printf("0 %d\n", 2*(c/b));
                for(int i = c/a; i >= 0; i --){
                  if((c-a*i)%b==0) {
                     printf("%d %d\n", 2*i, 2*(c-a*i)/b);
                     d = 1;
                     break;
                  }
               }
               if(d==0) printf("Impossible\n");
//                    }
//                    else {
//                        printf("%d %d\n", 2*(c/a), 2*(c%a/b));
//                    }
            }
            else {
//                 if(c%b==0) printf("0 %d\n", 2*c/b);
//                    else if(c%b%a) {
                        d = 0;
//                        if(c%a) printf("Impossible\n");
//                        else printf("%d 0\n", 2*(c/a));
                         for(int i = c/b; i >= 0; i --){
                             if((c-b*i)%a==0) {
                                printf("%d %d\n", 2*(c-b*i)/a, 2*i);
                                d = 1;
                                break;
                             }
                          }
                        if(d==0) printf("Impossible\n");
//                    }
//                    else {
//                        printf("%d %d\n", 2*(c/b), 2*(c%b/a));
//                    }
                }
            }
        }
    return 0;
}

代码有些累赘,为了保持思考过程就没删去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值