当前位置: 首页 > article >正文

P9421 [蓝桥杯 2023 国 B] 班级活动--数学题(配对问题)

P9421 [蓝桥杯 2023 国 B] 班级活动--数学题

      • 题目
  • 解析
    • 巧思
      • 代码

题目

在这里插入图片描述

解析

题目中的配对问题,要求配对的成功的数字不重复,那么我们需要把多余2次的数记录下来,我们巧妙的运用到了哈希方法。

开始分析解题思路。一共有3种情况,
1.如果配对次数为1的值,我们只需要更改一次
2.如果配对次数大于2的值,我们需要更改两次
3.让次数大于2的值和次数为1的值配对,也只需更改一次

题目中说到最少,那我们肯定选更改一次的。那我们优先选次数大于2的和次数为1的值进行配对,如果次数为1的值用完那就只能用情况2了将剩余的次数*2

for (int i = 1; i <= n; i++) {
		cin >> a;
		f[a]++;//这里听挺巧秒的,记一下
		if (f[a] > 2)
			res++;//记录多出来的次数

巧思

这里巧妙的运用到哈希用res记录了大于2的次数一共有多少

f[a]++;
		if (f[a] > 2)
			res++;

代码

#include <iostream>
#include <vector>
#include <set>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <queue>
#include <climits>  // 包含INT_MAX常量
#include <cctype>
using namespace std;
int n, a, cnt, res;
int f[100010];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a;
		f[a]++;//这里听挺巧秒的,记一下
		if (f[a] > 2)
			res++;
	}
	for (int i = 1; i <= n; i++) {
		if (f[i] == 1)
			cnt++;
	}
	if(cnt>res) cout<<res+(cnt-res)/2;
	else
		cout <<res;


	return 0;
}

http://www.kler.cn/a/579475.html

相关文章:

  • 基于遗传算法的IEEE33节点配电网重构程序
  • leetcode77.组合
  • 基于STC89C52的8x8点阵贪吃蛇游戏
  • Vue 3 实现富文本内容导出 Word 文档:前端直出方案与优化实践
  • 【SpringBoot】深入解析 Maven 的操作与配置
  • 计算机网络:电路交换,报文交换,分组交换
  • golang学习笔记——go语言安装及系统环境变量设置
  • 2025.3.9机器学习笔记:文献阅读
  • 物联网-IoTivity:开源的物联网框架
  • 深度学习DNN实战
  • 批量删除 Excel 中所有图片、某张指定图片以及二维码图片
  • 电子档案图片jpg格式表单化审核
  • MySQL面试篇——性能优化
  • 热门面试题第十天|Leetcode150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素
  • 学习工具的一天之(burp)
  • LeetCode 31 - 下一个排列
  • 快速排序c语言版
  • Windows编译环境搭建(MSYS2\MinGW\cmake)
  • langchain4j+ONNX小试牛刀
  • STM32如何精准控制步进电机?