1 条题解

  • 0
    @ 2025-7-15 18:07:21

    方法思路

    1. 统计数组中每个数字(1-6)的出现次数
    2. 根据题目条件,可能的三元组有(1,2,4)和(1,3,6)
    3. 对于数字1,它可以同时参与这两种三元组,但每个1只能用一次
    4. 因此需要在两种三元组之间合理分配数字1的使用,使总操作次数最大化

    代码实现

    Java
    import java.util.*;
    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(in.readLine());
            int[] count = new int[7];
            
            StringTokenizer st = new StringTokenizer(in.readLine());
            for(int i = 0; i < n; i++) {
                count[Integer.parseInt(st.nextToken())]++;
            }
            
            // 先尝试分配所有可能的(1,2,4)三元组
            int triplet124 = Math.min(Math.min(count[1], count[2]), count[4]);
            
            // 剩余的1可以用于(1,3,6)三元组
            int triplet136 = Math.min(Math.min(count[1] - triplet124, count[3]), count[6]);
            
            System.out.println(triplet124 + triplet136);
        }
    }
    
    
    Python
    def max_operations(n, arr):
        count = [0] * 7
        for num in arr:
            count[num] += 1
        
        # 计算可以形成的(1,2,4)三元组数量
        triplet124 = min(count[1], count[2], count[4])
        
        # 计算可以形成的(1,3,6)三元组数量
        triplet136 = min(count[1] - triplet124, count[3], count[6])
        
        return triplet124 + triplet136
    
    n = int(input())
    arr = list(map(int, input().split()))
    print(max_operations(n, arr))
    
    
    C++
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <sstream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        
        vector<int> count(7, 0);
        for(int i = 0; i < n; i++) {
            int num;
            cin >> num;
            count[num]++;
        }
        
        // 计算可以形成的(1,2,4)三元组数量
        int triplet124 = min({count[1], count[2], count[4]});
        
        // 计算可以形成的(1,3,6)三元组数量
        int triplet136 = min({count[1] - triplet124, count[3], count[6]});
        
        int maxOperationCount = triplet124 + triplet136;
        cout << maxOperationCount << endl;
        
        return 0;
    }
    
    
    • 1

    信息

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