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

CF442A Borya and Hanabi

题目

CF442A Borya and Hanabi
在这里插入图片描述

算法标签: 枚举, 位运算优化, 模拟

思路

注意到, 颜色数量和数字数量都是 5 5 5, 因此可以使用位运算枚举需要选择的颜色数量数字数量, 如果能将所有牌覆盖到, 那么当前方案就是一个合法的方案可以更新 a n s ans ans, 但是因为牌是可能有重复的, 需要开一个 s e t set set对牌进行去重, 需要将二维信息映射到一维, 也就是 a × 10 + b a \times 10 + b a×10+b每一种牌生成唯一的哈希值, 然后枚举所有的颜色和数字的选择情况

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <set>

using namespace std;

const int M = 1 << 5, INF = 0x3f3f3f3f;

int get(int x) {
	int ans = 0;
	for (int i = 0; i < 5; ++i) {
		ans += x >> i & 1;
	}
	return ans;
}


int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int n;
	cin >> n;

	map<char, int> mp;
	mp['R'] = 0;
	mp['G'] = 1;
	mp['B'] = 2;
	mp['Y'] = 3;
	mp['W'] = 4;

	set<int> st;
	for (int i = 0; i < n; ++i) {
		string s;
		cin >> s;
		int col = mp[s[0]];
		int val = s[1] - '1';
		st.insert(col * 10 + val);
	}

	n = st.size();

	int ans = INF;
	// 枚举所有颜色选择情况
	for (int i = 0; i < M; ++i) {
		// 枚举所有数字选择情况
		for (int j = 0; j < M; ++j) {
			set<int> vis;

			// 枚举所有牌
			for (auto &x : st) {
				int curr = 0;
				int col = x / 10;
				int val = x % 10;

				if (i >> col & 1) {
					curr += (col + 1) * 10;
				}
				if (j >> val & 1) {
					curr += val + 1;
				}
				vis.insert(curr);
			}

			if (vis.size() == n) {
				int cnt = get(i) + get(j);
				ans = min(ans, cnt);
			}
		}
	}

	cout << ans << "\n";
	return 0;
}
http://www.dtcms.com/a/121727.html

相关文章:

  • latex模板文件
  • VTK随笔十四:QT与VTK的交互示例(平移)
  • Docker多阶段构建深度优化指南:从GB到MB的镜像瘦身革命
  • 【C语言】浮点数在内存的储存
  • Element Plus 组件库二次封装在ZKmall商城的实践与沉淀
  • 2.4GHz射频前端噪声系数优化架构
  • 内存分配中的堆(Memory Heap)详解
  • C++类成员内存分布详解
  • Android 11 (API 30) 及更高版本中,查询的特定应用商店包,无需动态请求权限处理
  • MyBatis 详解及代码示例
  • 机器学习--数据填充
  • 楼宇自控系统构建机电设备管理新方式,提升建筑管理水平
  • 【C++进阶】关联容器:set类型
  • Python 3.x cxfreeze打包exe教程
  • LeetCode 解题思路 35(Hot 100)
  • 如何理解KMP算法中的next数组
  • 气象水文耦合模式 WRF-Hydro 建模技术与案例实践应用
  • [leetcode]差分算法
  • FPGA_DDR错误总结
  • Spring Boot 应用中如何避免常见的 SQL 性能问题
  • C++学习之套接字并发服务器
  • 砍树(二分)
  • 搜广推校招面经七十一
  • 示波器直流耦合与交流耦合:何时使用哪种?
  • Spring Boot 中集成 Knife4j:解决文件上传不显示文件域的问题
  • [漏洞篇]SSRF漏洞详解
  • 华为网路设备学习-17
  • 即时通讯软件BeeWorks,企业如何实现细粒度的权限控制?
  • PostgreSQL-数据库的索引 pg_operator_oid_index 损坏
  • JAVAWeb_Servlet:前置准备与理论简易介绍