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;
}
posted @ 2021-11-01 15:33  Bcoi  阅读(47)  评论(0)    收藏  举报