1 条题解

  • 0
    @ 2026-4-13 9:15:36

    题目回顾

    我们有一个数组 a1,a2,,ana_1, a_2, \dots, a_n,可以:

    1. 删除任意一个元素
    2. 将一个元素的值增加 11

    目标:使数组元素的和能被 33 整除,求最少操作次数


    核心思路

    设数组总和为 ss,考虑 smod3s \bmod 3 的余数。

    情况 1:smod3=0s \bmod 3 = 0

    此时已经满足要求,不需要任何操作。
    答案 = 0


    情况 2:smod3=2s \bmod 3 = 2

    要让总和能被 33 整除,需要让 ss 增加 11(因为 2+1=32+1=3,模 3300)。

    • 操作 2(增加 11)恰好做一次,就可以让总和增加 11
    • 也可以考虑删除一个元素,但删除会使总和减少,不一定更好。

    结论:答案 = 1(因为一次增加操作即可)


    情况 3:smod3=1s \bmod 3 = 1

    要让总和能被 33 整除,需要让 ss 增加 22(因为 1+2=31+2=3),或者删除一个元素使得新总和模 3300

    子情况 3.1:存在一个元素 aia_i 满足 aimod3=1a_i \bmod 3 = 1

    删除这个元素后,总和减少 aia_i,减少量模 3311
    原来总和 s1(mod3)s \equiv 1 \pmod 3,减去 11s0(mod3)s' \equiv 0 \pmod 3
    一次删除操作即可

    子情况 3.2:不存在 aimod3=1a_i \bmod 3 = 1

    我们无法通过一次删除得到模 3300 的总和(因为删除余 0022 的元素都不行)。
    那么只能通过增加操作
    一次增加操作让总和 +1+1,两次增加操作让总和 +2+2
    因为需要总和 +2+2,所以需要两次增加操作(可以加在同一元素或不同元素上)。

    结论

    • 若存在 aimod3=1a_i \bmod 3 = 1,答案 = 1
    • 否则,答案 = 2

    算法步骤

    1. 输入 tt
    2. 对每个测试用例:
      • 计算总和 ACCACC
      • 同时检查是否存在元素 xx 满足 xmod3=1x \bmod 3 = 1,记录标志 hvhv
    3. 根据 ACCmod3ACC \bmod 3 判断:
      • 若为 00 → 输出 00
      • 若为 22 → 输出 11
      • 若为 11
        • hvhv 为真 → 输出 11
        • 否则 → 输出 22

    时间复杂度

    • 每个测试用例 O(n)O(n)
    • nn 不超过 2×1052\times10^5,完全可行。

    代码实现(已给出)

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
        int t;
        cin>>t;
        while(t--){
            int k;
            cin>>k;
            int ACC=0;
            bool hv=false;
            for(int i=0;i<k;i++){
                int x;
                cin>>x;
                ACC+=x;
                if(x%3==1){
                    hv=true;
                }
            }
            if(ACC%3==0){
                cout<<0<<endl;
            }else if(ACC%3==2){
                cout<<1<<endl;
            }else{ // ACC%3 == 1
                if(hv==true){
                    cout<<1<<endl;
                }else{
                    cout<<2<<endl;
                }
            }
        }
    }
    

    总结

    本题的关键是分类讨论总和模 33 的余数,并结合删除和增加两种操作的最小代价:

    总和模 3 是否有余1元素 最少操作数
    00 任意 00
    22 11
    11
    22

    一句话题解
    若总和能被 33 整除,答案为 00
    若总和模 3322,答案为 11
    若总和模 3311,且存在模 3311 的元素,答案为 11,否则答案为 22

    • 1

    信息

    ID
    6503
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者