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

本文主要是介绍题目2693:蓝桥杯2022年第十三届决赛真题-卡牌【排序模拟法图解】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

😎卡牌

在这里插入图片描述

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

🥰自制动画–过程演示

在这里插入图片描述

🤔大致思路

  • 定义每个卡牌为结构体

  • struct card {int a;int b;
    };
    

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

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

  • sort(cards.begin(), cards.end(), [&](card x, card y)->bool{return x.a < y.a;});
    

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

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

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

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

⌨️代码

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

这篇关于题目2693:蓝桥杯2022年第十三届决赛真题-卡牌【排序模拟法图解】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885120

相关文章

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然