题解:AT_arc211_a

· · 题解

思路

我们考虑按照 1,1,1, \cdots, 2,2,2,\cdots,即将数字排序的方式构造。

我们发现不能够有相邻的 5,所以如果有 5,考虑在每两个 5 之间插入一个其他数字。此时,记 5 数量为 x,其他数量为 y,答案为 \max \{x-y-1, 0\},当然还有一种特殊情况。

若没有 5,且按照排序的构造存在冲突,那一定是四六,三七之类的,若存在其他的数,我们将这个数插入在这两个冲突的数之间即可,若不存在,则需操作一次。

然后就是之前说的有 5 的特殊情况,即当 5 较少时,去掉 5 会导致四六类型的冲突,此时我们只要把一个 5 放置在这两个数中间,便能同时解决这两个冲突。

代码实现

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int T, a[15];
int main() {
    scanf("%d", &T);
    while(T--) {
        for(int i = 1; i <= 9; ++i) scanf("%d", &a[i]);
        ll sum = 0;
        for(int i = 1; i <= 9; ++i)
            if(i != 5) sum += a[i];
        if(a[5]) {
            printf("%lld\n", max(0ll, a[5] - sum - 1));
            continue;
        }
        int k = -1;
        for(int j = 4; j >= 1; --j) {
            if(a[j] || a[10 - j]) {
                if(a[j] && a[10 - j]) k = j;
                break;
            }
        }
        if(k == -1) printf("0\n");
        else {
            if(sum - a[k] - a[10 - k] == 0)
                printf("1\n");
            else printf("0\n");
        }
    }
}