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

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;
}

相关文章:

  • FakeApp 技术浅析(三):自动编码器
  • ArcGIS 工程文件到 ArcGIS Pro 的无缝迁移:详细步骤与技巧
  • Linux系统管理二
  • MYSQL之创建数据库和表
  • 算力集群+Pycharm+SSH连接经验(自用)
  • Redis篇:基础知识总结与基于长期主义的内容更新
  • 德鲁伊连接池
  • ROS云课基础题库-01C++案例-甜甜圈
  • TCP和UDP
  • python JSON模块
  • VS(visual studio 2022)的实用调试小技巧[特殊字符]
  • 《 C++ 修炼全景指南:二十六 》想懂数据库?深入 B 树的世界,揭示高效存储背后的逻辑
  • 低空经济-飞行数据平台 搭建可行方案
  • Unity DOTS从入门到精通之 自定义Authoring类
  • 1:1精准还原!用Python+Adobe Acrobat DC实现PDF转Word全自动化
  • 【Git】合并,删除分支
  • JVM - 3.垃圾回收
  • 启智平台华为昇腾910B使用MS-Swift微调Janus-Pro-7/1B
  • Spring(1)——mvc概念,部分常用注解
  • CS6212规格书/USB Type-C Retimer Switch芯片规格详细说明
  • 阚吉林任重庆市民政局党组书记,原任市委组织部主持日常工作的副部长
  • 上海消防全面推行“检查码”,会同相关部门推行“综合查一次”
  • 中俄领导人将讨论从俄罗斯经蒙古至中国天然气管道项目?外交部回应
  • 宁合两大都市圈交汇之城含山:要想身体好,常往含山跑
  • 金球看淡,不服就干!这是抬不起腿却昂着头的劳塔罗
  • 央行:5月8日起,下调个人住房公积金贷款利率0.25个百分点