ARC128 B - Balls of Three Colors(数论)
目录
Description
有三个数,每次可以选择两个数减一,剩下的一个数加二,求只剩下一个数的最小操作数
State
\(1<=T<=100\)
\(1<=R,G,B<=10^8\)
Input
3
1 2 2
1 2 3
1 2 4
Output
2
-1
4
Solution
首先一定是有两个相同的数,然后将这两个数归零
如何判断能否构成两个相同的数呢?每次操作一定是某个数与其他的数之间的差距缩小 \(3\) ,所以只要找到两个数之间的差是 \(3\) 的倍数即可
Code
const int N = 1e5 + 5;
int n, m, k, _;
int a[N];
signed main()
{
// IOS;
rush(){
sddd(a[1], a[2], a[3]);
sort(a + 1, a + 4);
if(a[1] == a[3]){
pd(a[1]);
continue;
}
if(a[1] == a[2]){
pd(a[1]);
continue;
}
if(a[2] == a[3]){
pd(a[2]);
continue;
}
int ok = 0, minn = 1e9;
if((a[2] - a[1]) % 3 == 0){
ok = 1;
minn = min(a[2], minn);
}
if((a[3] - a[1]) % 3 == 0){
ok = 1;
minn = min(a[3], minn);
}
if((a[3] - a[2]) % 3 == 0){
ok = 1;
minn = min(a[3], minn);
}
if(ok) pd(minn);
else pd(-1);
}
// PAUSE;
return 0;
}