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

安阳网站建设哪家便宜谈谈你对网络营销的认识

安阳网站建设哪家便宜,谈谈你对网络营销的认识,网站开发用什么数据库,个体户做网站是怎么备案题解:卡牌问题 题目传送门:P8800 [蓝桥杯 2022 国 B] 卡牌 一、题目描述 小明有n种卡牌,每种卡牌有a_i张。他可以用m张空白牌制作任意卡牌,但第i种卡牌最多只能制作b_i张。问最多能凑出多少套"完整卡牌"(…

题解:卡牌问题

题目传送门:P8800 [蓝桥杯 2022 国 B] 卡牌

一、题目描述

小明有n种卡牌,每种卡牌有a_i张。他可以用m张空白牌制作任意卡牌,但第i种卡牌最多只能制作b_i张。问最多能凑出多少套"完整卡牌"(每套包含每种卡牌各一张)。

二、题目分析

这是一个典型的二分答案问题。我们需要找到最大的套数x,使得我们可以通过使用空白牌,让每种卡牌的数量都至少达到x张,且使用的空白牌总数不超过m张。

三、解题思路

  1. 二分搜索:我们可以在可能的套数范围内进行二分搜索,检查某个套数x是否可行。
  2. 可行性检查:对于每个候选的x,计算每种卡牌需要补充的数量(x - a_i),但要不超过b_i的限制,且总和不超过m。

四、算法讲解

算法采用二分答案策略:

  1. 排序:虽然题目没有明确要求,但将卡牌按现有数量排序可能有助于优化(但原代码中排序实际上不影响最终结果)。
  2. 二分框架:在可能的套数范围[0, max_a + m]内进行二分搜索。
  3. 检查函数:对于中间值mid,计算将所有卡牌补充到至少mid张所需空白牌数,检查是否满足条件。

以样例为例:

  • 输入:n=4, m=5, a=[1,2,3,4], b=[5,5,5,5]
  • 检查x=3:
    • 需要补充:2(1→3),1(2→3),0(3→3),0(4→3)
    • 总空白牌使用=3 ≤ 5,且每个补充不超过b_i限制
  • 检查x=4:
    • 需要补充:3(1→4),2(2→4),1(3→4),0(4→4)
    • 总空白牌使用=6 > 5,不可行
  • 因此最大可行套数是3

五、代码实现

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10;
int n, m;
struct node {int a, b;
} arr[N];// 排序函数,按现有卡牌数量升序排列
bool cmp(node c, node d) {return c.a < d.a;
}// 检查是否能凑出x套牌
bool check(int x) {int cnt = 0;for (int i = 1; i <= n; i++) {int tem = x - arr[i].a;if (tem < 0)  // 现有牌已足够,不需要补充continue;else if (tem > arr[i].b)  // 需要补充的数量超过b_i限制return false;else {cnt += tem;  // 累加需要的空白牌数量}}return cnt <= m;  // 总空白牌使用量不超过m
}void solve() {cin >> n >> m;for (int i = 1; i <= n; i++)cin >> arr[i].a;for (int i = 1; i <= n; i++)cin >> arr[i].b;sort(arr + 1, arr + 1 + n, cmp);  // 按现有数量排序// 二分查找最大可行套数int l = -1, r = 1e6;  // 初始范围设置while (l + 1 != r) {int mid = l + r >> 1;if (check(mid))l = mid;elser = mid;}cout << l;
}signed main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}

六、重点细节

  1. 二分边界:初始左边界设为-1,右边界设为1e6,确保覆盖所有可能情况。
  2. 检查函数:必须同时满足两个条件:(1)每种卡牌补充不超过b_i限制;(2)总补充数不超过m。
  3. 排序:虽然排序不是必须的,但可能在某些优化策略中有用(尽管原代码中并未利用排序特性)。

七、复杂度分析

  1. 时间复杂度:O(n log(max_answer)),其中二分次数为log(max_answer),每次检查需要O(n)时间。
  2. 空间复杂度:O(n),用于存储卡牌信息。

八、总结

本题通过二分答案的方法高效地解决了最大套数问题。关键在于设计合理的检查函数来判断某个套数是否可行。算法的时间复杂度能够很好地处理题目给出的数据规模限制(n ≤ 2×10^5)。

这种二分答案的思路在解决"最大化最小值"或"最小化最大值"类问题时非常有效,是算法竞赛中的重要技巧。

http://www.dtcms.com/wzjs/428423.html

相关文章:

  • 建设工程施工合同无效seo助力网站转化率提升
  • 上海手机网站开发谷歌搜索引擎下载安装
  • 网站开发后端用java叫什么怎么做好网站营销推广
  • 昆明做商城网站多少钱定制网站建设电话
  • 制作网站的页面设计怎么做优化设计高中
  • 两个网站做反向代理抖音seo排名优化软件
  • 建一个区域网站需要多少资金企业营销策划书范文
  • 小说网站做封面要钱吗百度指数入口
  • 做网站应该用什么数据库怎样在百度上发布免费广告
  • 做外贸 是否需要做中文网站网站入口百度
  • 常州微信网站建设服务网站推广的渠道有哪些
  • 网站建设与维护A卷答案网络推广优化
  • 为中小型企业构建网站牡丹江网站seo
  • 哪些网站做批发衣服电商运营基础知识
  • 网站建设douyanet网站优化seo推广服务
  • 返利网站制作百度sem代运营
  • 网站还没建设好可以备案吗常州百度seo排名
  • 用python写一个简单的网站网站维护费一年多少钱
  • 做网站毕设任务书购物网站制作
  • 自己怎样建网站做微商sem竞价外包公司
  • 乌鲁木齐网站设计seo网站推广助理
  • 个人可以做招聘网站吗百度百科推广联系方式
  • 想要网站推广页面不受国内限制的浏览器下载
  • 塑胶包装东莞网站建设西安网站关键词优化推荐
  • 湖州 网站建设公司长沙网站优化指导
  • 遵义公司做网站找哪个公司好广安网站seo
  • 博客网站日志页面代码优化大师下载安装app
  • 网站建设教学工作总结网站推广的方法有哪些?
  • 免注册个人网站制作百度首页的ip地址
  • 北京常用网站市场营销策划