1 条题解
-
0
方法思路
- 统计数组中每个数字(1-6)的出现次数
- 根据题目条件,可能的三元组有(1,2,4)和(1,3,6)
- 对于数字1,它可以同时参与这两种三元组,但每个1只能用一次
- 因此需要在两种三元组之间合理分配数字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
- 上传者