[ACM_水题] ZOJ 3706 [Break Standard Weight 砝码拆分,可称质量种类,暴力]

简介:


 

 

The balance was the first mass measuring instrument invented. In its traditional form, it consists of a pivoted horizontal lever of equal length arms, called the beam, with a weighing pan, also called scale, suspended from each arm (which is the origin of the originally plural term "scales" for a weighing instrument). The unknown mass is placed in one pan, and standard masses are added to this or the other pan until the beam is as close to equilibrium as possible. The standard weights used with balances are usually labeled in mass units, which are positive integers.

With some standard weights, we can measure several special masses object exactly, whose weight are also positive integers in mass units. For example, with two standard weights 1 and 5, we can measure the object with mass 145 or 6 exactly.

In the beginning of this problem, there are 2 standard weights, which masses are x and y. You have to choose a standard weight to break it into 2 parts, whose weights are also positive integers in mass units. We assume that there is no mass lost. For example, the origin standard weights are 4 and 9, if you break the second one into 4and 5, you could measure 7 special masses, which are 1, 3, 4, 5, 8, 9, 13. While if you break the first one into 1 and 3, you could measure 13 special masses, which are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13! Your task is to find out the maximum number of possible special masses.

Input

There are multiple test cases. The first line of input is an integer T < 500 indicating the number of test cases. Each test case contains 2 integers x and y. 2 ≤ xy ≤ 100

Output

For each test case, output the maximum number of possible special masses.

Sample Input

2
4 9
10 10

Sample Output

13
9

Author: YU, Zhi
Contest: The 10th Zhejiang Provincial Collegiate Programming Contest

 

题目大意:给你2个砝码X,Y,你可以把一个打破变成2个砝码,用新的3个砝码可以称出最多质量的种类是多少?

解题思路:暴力枚举所有的打破砝码的方法,然后针对每种情况计算出所有可能的组合放进map里[可以去除重复的数字],则map的大小就是该种拆法可以称出的种类数。[这里要注意0不算]

 

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<set>
 4 using namespace std;
 5 int main(){
 6     int T;
 7     cin>>T;
 8     while(T--){
 9         int x,y;
10         cin>>x>>y;
11         set<int>Q;
12         Q.clear();
13         int max=1;
14         for(int i=1;i<=x/2;i++){
15             int a=i,b=x-i,c=y;
16             Q.insert(a);//单独一个砝码
17             Q.insert(b);
18             Q.insert(c);
19             Q.insert(a+b);//2个砝码
20             if(a-b!=0)Q.insert(abs(a-b));
21             Q.insert(a+c);
22             if(a-c!=0)Q.insert(abs(a-c));
23             Q.insert(b+c);
24             if(b-c!=0)Q.insert(abs(b-c));
25             Q.insert(a+b+c);//3个砝码
26             if(a+b-c!=0)Q.insert(abs(a+b-c));
27             if(a-b+c!=0)Q.insert(abs(a-b+c));
28             if(a-b-c!=0)Q.insert(abs(a-b-c));
29             //cout<<a<<' '<<b<<' '<<c<<' '<<Q.size()<<'\n';
30             if(Q.size()>max)max=Q.size();
31             Q.clear();
32         }//拆x
33         for(int i=1;i<=y/2;i++){
34             int a=i,b=y-i,c=x;
35             Q.insert(a);
36             Q.insert(b);
37             Q.insert(c);
38             Q.insert(a+b);
39             if(a-b!=0)Q.insert(abs(a-b));
40             Q.insert(a+c);
41             if(a-c!=0)Q.insert(abs(a-c));
42             Q.insert(b+c);
43             if(b-c!=0)Q.insert(abs(b-c));
44             Q.insert(a+b+c);
45             if(a+b-c!=0)Q.insert(abs(a+b-c));
46             if(a-b+c!=0)Q.insert(abs(a-b+c));
47             if(a-b-c!=0)Q.insert(abs(a-b-c));
48             //cout<<a<<' '<<b<<' '<<c<<' '<<Q.size()<<'\n';
49             if(Q.size()>max)max=Q.size();
50             Q.clear();
51         }//拆y
52         cout<<max<<'\n';
53     }return 0;
54 
55 }
复制代码

相关文章
【PTA】7-8 到底有多二 (15分)
【PTA】7-8 到底有多二 (15分)
2165 0
PTA 7-1 多二了一点 (15 分)
若一个正整数有 2n 个数位,后 n 个数位组成的数恰好比前 n 个数位组成的数多 2,则称这个数字“多二了一点”。
82 0
PTA 7-4 胖达与盆盆奶 (20 分)
俗称“胖达”,会排队吃盆盆奶。它们能和谐吃奶的前提,是它们认为盆盆奶的分配是“公平”的,即:更胖的胖达能吃到更多的奶,等胖的胖达得吃到一样多的奶。
108 0
PTA 1083 是否存在相等的差 (20 分)
给定 N 张卡片,正面分别写上 1、2、……、N,然后全部翻面,洗牌,在背面分别写上 1、2、……、N。
46 0
PTA 1056 组合数的和 (15 分)
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。
90 0
PTA 1046 划拳 (15 分)
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。
75 0
|
测试技术
PTA 1039 到底买不买 (20 分)
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。
89 0
|
测试技术
PTA 1011 A+B 和 C (15 分)
给定区间 [−2 31 ,2 31 ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
89 0
PTA 1088 三人行 (20 分)
子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”
66 0