题目2693:蓝桥杯2022年第十三届决赛真题-卡牌【排序模拟法图解】

😎卡牌

这道题是最近难得独立想出来的一道题目,从题目到代码没有看过题解, 全是自己的思路

🥰自制动画--过程演示

🤔大致思路

  • 定义每个卡牌为结构体

c 复制代码
struct card {
    int a;
    int b;
};

有两个属性,a表示该卡牌的数量, b表示空卡牌使用次数上限。

  • 根据规律,我们先将所有卡牌按照a的值进行排序:

c 复制代码
sort(cards.begin(), cards.end(), [&](card x, card y)->bool{return x.a < y.a;});

我们用存放card类型的动态数组cards来存放所有的卡牌结构体

  • 根据题目所给定的条件,我们只有m个的空卡牌,也就是我们总共只能对卡牌增加m

所以我们使用一个大循环,次数为m次,每次都只兑换数量最少的卡牌, 也就是a属性最小的卡牌,兑换完后,被兑换的卡牌的可以被增加的机会 就会少一次,那么card.b--。类似于木桶效益,最少的卡牌数量 决定了一套卡牌的数量,所以一旦有一个卡牌次数用完了,直接结束即可。

同时,如果卡牌数量加一后,不再是最小的卡牌,要将这个卡牌放到对应的位置上去,方便下次继续处理最小的卡牌。

⌨️代码

c 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;

struct card {
	int a;
	int b;
};

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n, m;
	cin >> n >> m;
	vector<card> cards(n);
	for (int i = 0; i < n; i++) {
		cin >> cards[i].a;
	}
	for (int i = 0; i < n; i++) {
		cin >> cards[i].b;
	}
	
	sort(cards.begin(), cards.end(), [&](card x, card y) -> bool {
		return x.a < y.a ;
	});
	
	
	while(m--) {
		card &c = cards[0];			//遍历所有的卡片 
		if (c.b > 0) {
			c.a ++, c.b --;
			int i = 0;
			while(cards[i].a > cards[i+1].a) {
				swap(cards[i], cards[i+1]);
				i += 1;
			}
			
		} else {
			break;
		}
	}
	cout << cards[0].a << endl;
	
}
相关推荐
2402_88289386几秒前
深入浅出 unordered_map 与 unordered_set——从使用到底层差异
c++·哈希·unordered_map·unordered_set
今天要早睡_25 分钟前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
汉克老师1 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》
c++·csp-j·小学生·学c++编程
闻缺陷则喜何志丹1 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
汉克老师1 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程
程序猿编码1 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
影视飓风TIM2 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
C++ 老炮儿的技术栈2 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
xxwxx__3 小时前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
wuminyu3 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++