码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5610 Baby Ming and Weight lifting(枚举)

时间:2016-04-29 15:57:50      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

Baby Ming and Weight lifting

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


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
 

Source
 

Recommend
hujie   |   We have carefully selected several similar problems for you:  5674 5673 5672 5671 5669 
把每种情况都枚举一遍。

 
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
	int t,m,n,i,j,k,l,sum,minn,maxx,num,flag,a,ans1,ans2;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d",&m,&n,&sum);
		if(sum%2)
		{
			printf("Impossible\n");
			continue;
		}
		else
		{
			minn=min(n,m);
		    maxx=max(n,m);
		}
		if(maxx*2>sum)//不能用大的 
		{
			if(sum%minn)
			printf("Impossible\n");
			else
			{
				if(sum/minn%2)
				printf("Impossible\n");
				else
				{
					num=sum/minn;
			        if(minn==m)
		    	    printf("%d 0\n",num);
		    	    else
			        printf("0 %d\n",num);
				}	
			}
		 } 
		 else
		 {
		 	flag=0;
		 	l=sum/maxx;
		 	for(i=l;i>=0;i--)
		 	{
		 		if(flag)
		 		break;
		 		if((sum-i*maxx)%minn==0)
		 		{
		 			if(flag)
		 			break;
		 			a=(sum-i*maxx)/minn;
		 			for(j=i;j>=0;j--)
		 			{
		 				if(flag)
		 				break;
		 				for(k=0;k<=a;k++)
		 				{
		 					if(k*minn+j*maxx==sum/2)//如果能构成一半就可以,比较机智的一个地方 
		 					{
		 						ans1=i;
		 						ans2=a;
		 						flag=1;
							 }
						 }
					 }
				 }
			 }
			 if(flag==0)
			 printf("Impossible\n");
			 if(flag==1)
			 {
			 	if(minn==m)
			 	printf("%d %d\n",ans2,ans1);
			 	else
			 	printf("%d %d\n",ans1,ans2);
			 }
		 }
	}
	return 0;
}

HDU 5610 Baby Ming and Weight lifting(枚举)

标签:

原文地址:http://blog.csdn.net/yao1373446012/article/details/51273399

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!