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

P7514 [省选联考 2021 A/B 卷] 卡牌游戏

P7514 [省选联考 2021 A/B 卷] 卡牌游戏

大意

给出 \(n\) 张卡牌,每张卡牌都有两个权值 \(a_i\)\(b_i\),分别对应的是正面和反面,求在至少翻 \(m\) 张牌,然后求出最小的极差。

思路

我们考虑这样的事,首先,我们不考虑每一张牌的情况,我们只考虑这个先处理极差的问题,我们先把这 \(2n\) 张牌记录一下类型,然后将其排序。

排完序之后,我们需要的是选择一段区间 \([L, R]\),使得 \([L, R]\) 的区间包含所有的类型,且其中间反转的牌不超过 \(m\) 个,那么这个区间的 \(val_R - val_L\) 就是一个合法的答案,我们要想使得这个值尽可能的小,我们不妨使用双指针的写法,固定左端点,向右查询合法右端点。

这个过程是具有单调性的,你的 \(L\) 向右,\(R\) 也必定向右,具体过程是这样的,如果当前的区间不合法,那么就让 \(R\) 右移,使其包含所有的 \(n\) 个情况,一旦包含足够,就判断是否合法,这个过程是可以在扫描的过程中动态处理的,这步判断是 \(\mathcal{O}(1)\) 的,如果是合法就将 \(L\) 向右收缩,这样去看看有没有更优的 \(val_R - val_L\)

代码

#include<iostream>
#include<algorithm>
using namespace std;const int MAXN = 1e6 + 5;
int n, m, l, r, cnt = 0;
struct node{long long val, id;bool op;
}k[MAXN << 1];
int t[MAXN << 1];
bool cmp(node x, node y){return x.val < y.val;
}int main(){// freopen("card.in", "r", stdin);// freopen("card.out", "w", stdout);cin.tie(0) -> ios::sync_with_stdio(0);cin >> n >> m;for(int i = 1;i <= n;i ++){cin >> k[i].val;k[i].id = i;k[i].op = 1;}for(int i = 1;i <= n;i ++){cin >> k[i + n].val;k[i + n].id = i;k[i + n].op = 0;}sort(k + 1, k + 2 * n + 1, cmp);
//    for(int i = 1;i <= n * 2;i ++){
//        cout << k[i].val << ' ' << k[i].id << ' ' << k[i].op << '\n';
//    }for(l = 0;cnt + k[l + 1].op <= m && !t[k[l + 1].id];l ++){cnt += k[l + 1].op;t[k[l + 1].id] = 1;}for(r = 2 * n + 1;cnt + k[r - 1].op <= m && !t[k[r - 1].id];r --){cnt += k[r - 1].op;t[k[r - 1].id] = 1; }long long ans = 1e9 + 7;while(l >= 0) {ans = min(k[r - 1].val - k[l + 1].val, ans);t[k[l].id] = 0;cnt -= k[l].op;l --;for(r;cnt + k[r - 1].op <= m && !t[k[r - 1].id];r --){cnt += k[r - 1].op;t[k[r - 1].id] = 1; }}cout << ans << '\n';
}
http://www.jsqmd.com/news/409021/

相关文章:

  • Flutter 中如何优雅地处理复杂表单
  • 《百面大模型》助你轻松入门大模型,求职无忧!
  • LeetCode 390 消除游戏 - Swift 题解
  • GCC编译器中__attribute__部分整理
  • Java高频面试题:说说Redis的内存淘汰策略?
  • 研究生必藏:文献综述写作神器,从检索到成文一步到位
  • 【UI自动化测试】4_PO模式 _PO模式封装
  • 【UI自动化测试】3_PO模式 _封装思想
  • AMVMD与深度学习风电机组轴承故障诊断【附代码】
  • 微服务架构下Spring Session与Redis分布式会话实战全解析
  • 履带车双液压马达内泄漏故障诊断【附代码】
  • IoC不止Spring!求同vs存异,两种反向IoC的核心逻辑
  • 永劫无间守望先锋双向联动 双厨狂喜,你的硬盘准备好了吗?
  • 50行代码玩转C++错误处理!一个极简IoC设计的Wrong.h实战解析
  • 轻松删除浅灰色中括号全攻略
  • 路由器配置 DDNS 实现稳定的远程访问
  • 2026 联合省选游记
  • 大数据领域数据血缘的发展历程与未来展望
  • 改进图神经网络滚动轴承劣化趋势【附代码】
  • 数据库领域:SQL 数据验证与约束检查_副本
  • 时空特征融合深度学习化工过程故障诊断【附代码】
  • 图神经网络行星齿轮箱复合故障诊断【附代码】
  • 低代码AI架构:让灵活智能架构落地更简单(附实战demo)
  • OpenCode For Windows 自定义模型和接入点
  • AI虚拟健康架构师入门到精通:10周学习路线+实战项目(附资源包)
  • 260201
  • DeepSeek可以做广告吗?联系哪个服务商? - 品牌2025
  • 现在的想法@2026
  • K-D Tree
  • Kotlin程序员面试算法宝典【1.1】