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

蓝桥云客 卡牌

2.卡牌 - 蓝桥云课

卡牌

问题描述

这天,小明在整理他的卡牌。
他一共有n种卡牌,第i种卡牌上印有正整数i(i∈[1,n]),且第i种卡牌现有a_i张。
而如果有n张卡牌,其中每种卡牌各一张,那么这n张卡牌可以被称为一套牌。小明为了凑出可能多套牌,拿出了m张空白牌,他可以在上面写上数i,将其当做第i种牌来凑出套牌。然而小明觉得手写的牌不太美观,决定第i种卡牌最多手写b_i张。
请问小明最多能凑出多少套牌?

输入格式

输入共3行,第一行为两个正整数n, m。
第二行为n个正整数a_1, a_2, ..., a_n。
第三行为n个正整数b_1, b_2, ..., b_n。

输出格式

一行,一个整数表示答案。

样例输入
4 5
1 2 3 4
5 5 5 5
样例输出
3
样例说明

这5张空白牌中,拿2张写1,拿1张写2,这样每种牌的牌数就变为了3, 3, 4,可以凑出3套牌,剩下2张空白牌不能再帮助小明凑出一套。

评测用例规模与约定
  • 对于30%的数据,保证n < 2000;
  • 对于100%的数据,保证n ≤ 2 × 10^5;a_i, b_i ≤ 2n;m ≤ n^2。
运行限制
  • 最大运行时间:1s
  • 最大运行内存:512M

总通过次数:3448 | 总提交次数:4060 | 通过率:84.9%

难度:中等 标签:2022 国赛 二分

思路:

贪心思路,能凑出一组排就凑,a数组不够就用b数组和m的,如果凑不出来就结束了。
代码如下:

#include<iostream>
#include<algorithm>
#include<iomanip> 
using namespace std;
typedef long long ll;
const ll N = 2e5+10;
ll n,a[N],b[N],m;
ll cnt = 0;
int main()
{
	cin >> n >> m;
  	for(ll i = 1 ; i <= n ; i++)
  	cin >> a[i];
  	for(ll i = 1 ; i <= n ; i++)
  	cin >> b[i];
  	bool found = true;;
  	while(1)
  	{
  		for(ll i = 1 ; i <= n ; i++)
  		{
  			if(a[i] > 0)
  			{
  				a[i]--;	
			}
			else if(b[i] > 0 && m > 0)
			{
				b[i]--;
				m--;
			}
			else
			{
				found = false;
				break;
			}
		}
		if(found)
		cnt++;
		else
		break;
	}
	cout << cnt;
    return 0;
}

思路:
二分枚举凑出卡牌的次数,然后跟贪心思维的过程类似,都是要模拟这个枚举的组数是否能成功。

代码如下:
 

#include<iostream>
#include<algorithm>
#include<iomanip> 
using namespace std;
typedef long long ll;
const ll N = 2e5+10;
ll n,a[N],b[N],m;
ll sum = 0;
bool check(ll x)
{
	ll p = m;
	for(ll i = 1 ; i <= n ; i++)
	{
		if(a[i] >= x)
		continue;
		else if(a[i] + b[i] < x)//可使用凑数的牌都不够直接return false; 
		return false;
		else if(a[i] + b[i] >= x && p > 0)
		{
			p = p - ( b[i] - ((a[i] + b[i]) - x));
		}
		else
		return false;
	}
	return true;
}
int main()
{
	cin >> n >> m;
  	for(ll i = 1 ; i <= n ; i++)
  	{
  		cin >> a[i];
  		sum += a[i];	
	}
  	for(ll i = 1 ; i <= n ; i++)
  	cin >> b[i];
	ll l = 0,r = 2*N;
	while(l + 1 != r)
	{
		ll mid = (l + r)/2;
		if(check(mid))
		{
			l = mid;
		}
		else
		{
			r = mid;
		}
	}
	cout << l;
    return 0;
}

相关文章:

  • unity3d 背景是桌面3d数字人,前面是web的表单
  • 服务器数据恢复—raid5阵列中硬盘出现坏道的数据恢复流程
  • 从CL1看生物计算机的创新突破与发展前景:技术、应用与挑战的多维度剖析
  • 20250307确认荣品PRO-RK3566开发板在Android13下的以太网络共享功能
  • jupyter配置多个核心
  • 每日定投40刀BTC(7)20250303 - 20250306
  • 蜗牛安装黑群晖7.X
  • CentOS7离线部署安装docker和docker-compose
  • Kotlin字符串操作在Android开发中的应用示例
  • 安孚科技携手政府产业基金、高能时代发力固态电池,开辟南孚电池发展新赛道
  • LTC6804、LTC6811、LTC6813的使用
  • 如何判断住宅IP与机房IP的方法
  • 【南华大学机械工程学院主办,澳大利亚莫道克大学支持 | EI、Scoups检索】2025年智慧能源与控制工程国际学术会议(SECE 2025)
  • clickhouse可视化分析工具
  • 亲测解决笔记本触摸板使用不了Touchpad not working
  • IDEA(十一)调整新版本的工具栏显示Git操作(pull、commit、push、revert等)
  • Spring Cloud之注册中心之Nacos的注册中心
  • K8s 1.27.1 实战系列(六)Pod
  • Redis7——进阶篇(四)
  • 3.7[Q]CV
  • 有什么做兼职的好的网站/常用的seo工具推荐
  • php网站做cdn/今日新闻头条大事
  • 什么是网站建设流程/外链网盘网站
  • 建设公司网站开发方案/免费正规大数据查询平台
  • 三屏合一网站建设/seo咨询
  • wordpress基础主题站/网站宣传和推广的方法有哪些