#S0012. [ARC128B] Balls of Three Colors
[ARC128B] Balls of Three Colors
[ARC128B] Balls of Three Colors
题面翻译
这道题的题目是“三种颜色的球”。我们有 R 个红色球,G 个绿色球,B 个蓝色球。你可以进行以下操作任意次:选择两种不同颜色的球,将它们变成另外一种颜色的球。例如,你可以选择一个红球和一个蓝球,将它们变成两个绿球。你的目标是让所有球变成同一种颜色。
判断这个目标是否可行,如果可行,求出实现它所需的最少操作次数,否则输出-1。
题目描述
個の赤いボール, 個の緑のボール, 個の青いボールがあります. あなたは,以下の操作を好きな回数繰り返すことができます.
- 色の異なる つのボールを選び,それら両方を残るもう一つの色のボールに変える.
例えば,赤いボールと青いボールを選んだ際は,それら両方を緑のボールに変えます.
あなたの目標は,すべてのボールを同じ色にすることです. 目標が達成可能であるか判定し,また可能であるなら,必要な操作回数の最小値を求めてください.
つの入力ファイルにつき, 個のテストケースを解いてください.
输入格式
入力は以下の形式で標準入力から与えられる.
各ケースは以下の形式で与えられる.
输出格式
各ケースについて,目標が達成不可能な場合は -1
を,そうでなければ必要な操作回数の最小値を出力せよ.
样例 #1
样例输入 #1
3
1 2 2
1 2 3
1 2 4
样例输出 #1
2
-1
4
提示
制約
- 入力される値はすべて整数である
Sample Explanation 1
例えば, については,以下のように操作を行えばよいです. - 緑のボールと青いボールを選び,それら両方を赤いボールに変える - 赤いボールと青いボールを選び,それら両方を緑のボールに変える - 赤いボールと青いボールを選び,それら両方を緑のボールに変える - 赤いボールと青いボールを選び,それら両方を緑のボールに変える
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while(t--){
int a,b,c,k;
cin >> a >> b >> c;
if(a>b)swap(a,b);
if(b>c)swap(b,c);
if(a>b)swap(a,b);
/*
k次变换,a,b变成一样,a+2k == b-k; 3k = b-a
k次变换,a,c变成一样,a+2k == c-k; 3k = c-a
k次变换,b,c变成一样,b+2k == c-k; 3k = c-b
*/
int ma=0x3f3f3f3f;
if((b-a)%3==0){
k = (b-a)/3;
ma = min(ma,k+(b-k));
}
if((c-a)%3==0){
k=(c-a)/3;
ma = min(ma,k+(c-k));
}
if((c-b)%3==0){
k=(c-b)/3;
ma = min(ma,k+(c-k));
}
if(ma==0x3f3f3f3f){
cout << -1<<endl;
}else{
cout << ma << endl;
}
}
return 0;
}
Statistics
Related
In following homework: