天天看點

BestCoder Round #69 Baby Ming and Weight lifting

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=5610

題意:給我們兩個盤,分别為a,b重量,問我們能否用這兩個盤組合成一個重c的杠鈴。

首先,杠鈴必須是兩邊平衡的,是以如果c都不是偶數直接就Impossible,題目就變為了問我們可不可以用a和b湊出c/2,剛剛拿到時小編的第一想法是母函數,但是一看……這麼弱的資料根本不需要母函數,直接暴力即可,當然還是有一點徐亞注意,那就是我們需要a的數量+b的數量的值最小,國小學過雞兔同籠問題的同學都知道……我們隻要先枚舉大的再枚舉小的就肯定會得到a+b最小值的答案。

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