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

P8800 [蓝桥杯 2022 国 B] 卡牌

P8800 [蓝桥杯 2022 国 B] 卡牌

分析

“最多” -- 二分

1.二分区间(凑齐的卡牌套数):

l:a[]min;r:(a[]+b[])max

2.check(x):

(1)for循环内:

判断x - a[i] <= b[i](对于 i 种牌,假设把空白牌用完,是否能凑齐x套)

        Y:定义一个变量,加上x - a[i](对于第 i 种牌,凑齐x套需要的空白牌数)

        N:return false;

(2)判断需要的空白牌是否超出题目给的范围(if(s <= m))

        s <= m:

                        s == m:ans = mid

                        s < m:l = mid + 1

        s > m:

                        r = mid - 1

代码 

注意:一定一定一定记得开long long.....

scanf("%lld")!!!

#include<iostream>
using namespace std;typedef long long ll;
const int N = 200010;
int a[N],b[N],n;
ll m;bool check(int x)
{ll s = 0;for(int i = 0;i < n;i ++){if(x - a[i] <= b[i]){if(x - a[i] > 0) s += (x - a[i]);}else return false;}if(s <= m) return true;else return false;
}int main()
{int l = 0x3f3f3f3f,r = 0;scanf("%d %lld",&n,&m);for(int i = 0;i < n;i ++){scanf("%d",&a[i]);l = min(l,a[i]);}for(int i = 0;i < n;i ++){scanf("%d",&b[i]);r = max(r,a[i] + b[i]);}int ans = 0;while(l <= r){int mid = l + r >> 1;if(check(mid)){ans = mid;l = mid + 1;}else r = mid - 1;}printf("%d",ans);return 0;
}

http://www.lryc.cn/news/341790.html

相关文章:

  • MySQL商城数据表(80-84)
  • 使用Gitbook生成电子书
  • 设计模式之传输对象模式
  • Re69:读论文 LaMDA: Language Models for Dialog Applications
  • 算法学习:二分查找
  • github提交代码失败解决方案
  • 连锁收银系统总仓到门店库存调拨操作教程
  • 公网tcp转流
  • 【Linux 基础 IO】文件系统
  • Chrome浏览器安装React工具
  • React常用组件分享
  • JSON原生AJAX
  • Go图片列表
  • 1.4 初探JdbcTemplate操作
  • React 第二十一章 Portals
  • ADS基础教程9-理想模型和厂商模型实现及对比
  • 从零开始学AI绘画,万字Stable Diffusion终极教程(二)
  • electron 通信总结
  • [基础] Unity Shader:顶点着色器(vert)函数
  • 什么是数据库的三大范式?
  • ASP.NET网上图书预约系统的设计
  • 双色球案例【C#】
  • 【LeetCode刷题】739. 每日温度(单调栈)
  • Docker-Consul容器服务更新与发现
  • 练习题(2024/5/6)
  • 利用matplotlib和networkx绘制有向图[显示边的权重]
  • Springboot+Vue项目-基于Java+MySQL的教学资料管理系统(附源码+演示视频+LW)
  • 从NoSQL到NewSQL——10年代大数据浪潮下的技术革新
  • 巴菲特股东大会5万字完整版来了!
  • LY/T 1860-2022 非甲醛类热塑性树脂胶合板检测