[蓝桥杯 2022 国 B] 卡牌(暴力 + 二分优化)

        根据题目描述,我们可以知道每张牌可填补的数量有限制,因此我们可以用暴力模拟出过程,首先我们需要寻找出每张牌中最小的牌数,再将空白牌填补成该牌即可,最后我们再进行遍历,寻找出最少数量的牌,就是我们要找的答案

上代码

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std; 

const int N = 2e5 + 10;
int a[N], b[N];//分别记录有多少张牌,最多可以写多少张
int n, m;

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

	cin >> n >> m;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}
	for(int i = 1; i <= n; i++){
		cin >> b[i];
	}
	for(int i = 1; i <= m; i++){//从第一张空白牌开始枚举
		int min1 = 0x3f3f3f3f;//初始化当前牌数最小值 
		int min_place = -1;//存储当前最小值的下标 
		for(int i = 1; i <= n; i++){
			if(min1 > a[i]){
				min1 = a[i];
				min_place = i;
			}
		}
		if(b[min_place]){//如果当前牌还可以继续填补,就进行填补 
			a[min_place]++;
			b[min_place]--;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值