POJ 2142:The Balance

摘要:
询问如何用a和b测量d的重量,假设它可以测量。在a*x+b*y=d之后,当x是最小值时,求出y的值。

The Balance
Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 4781 Accepted: 2092

Description

Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspirin using 300mg weights and 700mg weights, she can put one 700mg weight on the side of the medicine and three 300mg weights on the opposite side (Figure 1). Although she could put four 300mg weights on the medicine side and two 700mg weights on the other (Figure 2), she would not choose this solution because it is less convenient to use more weights. 
You are asked to help her by calculating how many weights are required. 

POJ 2142:The Balance第1张

Input

The input is a sequence of datasets. A dataset is a line containing three positive integers a, b, and d separated by a space. The following relations hold: a != b, a <= 10000, b <= 10000, and d <= 50000. You may assume that it is possible to measure d mg using a combination of a mg and b mg weights. In other words, you need not consider "no solution" cases. 
The end of the input is indicated by a line containing three zeros separated by a space. It is not a dataset.

Output

The output should be composed of lines, each corresponding to an input dataset (a, b, d). An output line should contain two nonnegative integers x and y separated by a space. They should satisfy the following three conditions. 
  • You can measure dmg using x many amg weights and y many bmg weights. 
  • The total number of weights (x + y) is the smallest among those pairs of nonnegative integers satisfying the previous condition. 
  • The total mass of weights (ax + by) is the smallest among those pairs of nonnegative integers satisfying the previous two conditions.

No extra characters (e.g. extra spaces) should appear in the output.

Sample Input

700 300 200
500 200 300
500 200 500
275 110 330
275 110 385
648 375 4002
3 1 10000
0 0 0

Sample Output

1 3
1 1
1 0
0 3
1 1
49 74
3333 1

题意是给出了a,b,d的重量。问使用a、b怎么测出d的重量,假设是能够测出的前提下。输出|x|+|y|的最小值。

a*x+b*y=d

之后求一下x的最小值时y的值。再求一遍y的最小值时x的值。两两比较即可。


代码:

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int xx,yy,yue;
int a,b,d;
vector <int> x_value;
vector <int> y_value;

void ex_gcd(int a,int b, int &xx,int &yy)
{
	if(b==0)
	{
		xx=1;
		yy=0;
		yue=a;
	}
	else
	{
		ex_gcd(b,a%b,xx,yy);

		int t=xx;
		xx=yy;
		yy=t-(a/b)*yy;

	}
}

void cal()
{
	int i;
	int min=abs(x_value[0])+abs(y_value[0]);
	int min_x=abs(x_value[0]),min_y=abs(y_value[0]);

	for(i=1;i<2;i++)
	{
		if(abs(x_value[i])+abs(y_value[i])==min)
		{
			if((abs(x_value[i])*a+abs(y_value[i])*b)<(min_x*a+min_y*b))
			{
				min_x=abs(x_value[i]);
				min_y=abs(y_value[i]);
			}
		}
		if(abs(x_value[i])+abs(y_value[i])<min)
		{
			min=abs(x_value[i])+abs(y_value[i]);
			min_x=abs(x_value[i]);
			min_y=abs(y_value[i]);
		}
	}
	cout<<min_x<<" "<<min_y<<endl;
}

int main()
{
	while(cin>>a>>b>>d)
	{
		if(a==0 && b==0 && d==0)
			break;
		ex_gcd(a,b,xx,yy);

		x_value.clear();
		y_value.clear();

		xx=xx*(d/yue);
		yy=yy*(d/yue);

		int r=a/yue;
		yy=(yy%r+r)%r;
		int xx0,yy0=yy;
		xx0=(d-yy*b)/a;
		x_value.push_back(xx0);
		y_value.push_back(yy);

		r=b/yue;
		xx=(xx%r+r)%r;
		x_value.push_back(xx);
		yy=(d-xx*a)/b;
		y_value.push_back(yy);
		cal();
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

免责声明:文章转载自《POJ 2142:The Balance》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用jQuery对图片进行居中设置php eval函数用法总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

TP框架

Thinkphp框架最初是由于企业级网站和网站的发展而诞生的。它最初诞生于2006年,名为fsc,2007年正式更名为thinkphp。它遵循Apache 2.0协议。定义和调用TP模板所有模板都必须放置在视图文件夹中。规则:一个控制器对应一个文件夹,一个方法对应文件TP模板的调用绝对路径。1.在Application文件夹下创建Admin文件夹,并在Adm...

input框输入金额处理的解决办法

最近,已经启动的项目在删除输入输入量时突然出现问题。各种在线搜索都没有找到你想要的。今天,我将以react框架为例进行代码贡献。我会写下需求和解决方案,希望对我的朋友有用。如果有更好的方法实现它,请给我一些建议!”在“:”下;n=数学。防抱死制动系统;vars=“”;对于{s+=.replace;}S=S||“整数”;n=数学。地板对于{varp=“”;对于...

图论介绍(Graph Theory)

G-v具有比G更多的连通分支,因此v被称为G的截断点G-e具有比G多的连通分支。定理:连通图G,其中e是桥e不属于G的任何环有顶点u,v,使得任何路径u-v都通过e连通图G;而w是存储在顶点u,v处的割点,使得任意路径u-v通过w定义:顶点之间的距离x-y:所有x-y路径的最小长度。...

java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

主要用于西门子PLC的M、Q、I、DB块的数据读写。该组件支持快速建立高性能Modbus TCP终端。对于日志记录,暂时只保留接口。具体来说,您可以为该组件支持的西门子通信实现两种协议。一种是S7协议,它几乎不需要PLC侧的参数配置。另一个是Fetch/Write协议,它有点麻烦。如果S7不方便阅读,您可以选择“获取/写入”。S7更方便。...

MAC接普通外置键盘的修改键位的方法

我使用Mac已经一年多了,现在我每天都越来越喜欢它。所有使用过Mac的学生都知道,Mac键盘的最大特点是它比普通键盘更具有命令键位置。普通键盘没有命令键。当我连接键盘时,我发现胜利键到处都是命令键。非常发达,所以你拥有mac下所需的所有密钥。但最关键的问题之一是,它们的顺序与Mac下的顺序不同。这与mac的使用习惯不一致。百度之后,我发现键盘可以修改。...

Oracle的分条件计数COUNT(我的条件),由浅入深

@目录本文涉及关键字COUNT、CASEWHEN和DECODE。Oracle COUNT内置函数。复杂计数。常规操作。中间操作。对中间操作的反思。高级操作。高级操作的修订版本。(你需要根据你的业务知识灵活轮换。)总结。本文涉及关键字COUNT、CASEWHEN和DECODE。Oracle计数。所有操作都基于下表作为操作对象。创建一个名为sqlcreateta...