[省选联考 2021 A/B 卷] 卡牌游戏
垃圾福建垫底选手来看看这题。
大家怎么都写带 \(log\) 的。
我来说一个线性做法好了。
那么我们考虑枚举 \(k\) 作为翻转完的最小值。
那么构造出一个满足条件的操作,我们在 \(a_i\) 中查询一个最大的位置使 \(a_i < k\) ,那么 \(a_1\) 到 \(a_i\) 都要进行翻转,且 \(b_1 到 b_i > k\),那么这样做的次数是 \(i\) 或者 \(i - 1\)(考虑\(k\)是\(b\)且对应的\(a\)在需要翻转的区间里)的。
那么考虑对这个 \(k\) 求出一个最小的最大值\(z\),同样的我们在\(a_i\)中查询一个最小的位置使\(a_i > z\),那么\(a_i\) 到 \(a_n\)都要进行翻转,且 \(b_i\) 到 \(b_n > k\),且 \(b_i\) 到 \(b_n < z\) ,那么这样做的次数是 \(n - i + 1\) 或者 \(n - i\) (考虑 \(z\) 是 \(b\) 且对应的 \(a\) 在需要翻转的区间里)的,两边次数加起来不超过 \(m\) 。
我们考虑对这几个条件进行分析一下,首先 \(i\) 对于 \(z\) 减小是单调的,由于 \(min\) 只能下降不能上升, \(max\) 只能上升不能下降,那么对于\(z\)下降来说,他的条件会越来越苛刻。
又因为我们从小到大枚举 \(k\) ,用来满足 \(k\) 的次数会单调不降,那么我们发现,对于一个 \(z\) ,他的所有条件即 \(b_i\) 到 \(b_n > k\),且 \(b_i\) 到 \(b_n < z\) ,次数和小于 \(m\) ,在 \(k\) 上升都具有单调性,感性分析一下,在 \(k\) 上升时, \(z\) 具有单调不降的性质。
那么我们只要对 \(k = 1\) 一个 \(log\) 求出对应的 \(z\) ,再进行双指针,就可以做到 \(O(n)\) 了。
upd:发现自己的这个做法挺难写的,应该考虑计算的时候,也扩展到整个序列就好做了。
[省选联考 2021 A/B 卷] 卡牌游戏
#include <bits/stdc++.h>
using namespace std;
struct hehe{
long long a, num;
int op;
bool operator < (hehe b) const
{
return a < b.a;
}
}a[2000001];
bool used[2000001];
int main()
{
// freopen("card3.in", "r", stdin);
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i].a);
a[i].num = i;
a[i].op = 1;
}
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[n + i].a);
a[i + n].num = i;
a[i].op = 1;
}
sort(a + 1, a + n * 2 + 1);
int l = 0, r = n * 2 + 1, now = 0;
while(!used[a[l + 1].num] && now + a[l + 1].op <= k) now += a[l + 1].op, used[a[l + 1].num] = 1, l++;
while(!used[a[r - 1].num] && now + a[r - 1].op <= k) now += a[r - 1].op, used[a[r - 1].num] = 1, r--;
long long ans = 1000000000000;
while(l >= 0)
{
ans = min(a[r - 1].a - a[l + 1].a, ans);
used[a[l].num] = 0;
now -= a[l].op;
l--;
while(!used[a[r - 1].num] && now + a[r - 1].op <= k) now += a[r - 1].op, used[a[r - 1].num] = 1, r--;
}
cout << ans << endl;
}
[省选联考 2021 A/B 卷] 卡牌游戏的更多相关文章
- 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)
洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\) \(10^9\) 的时代了吗?落伍了落伍了/ ...
- [省选联考 2021 A/B 卷] 图函数
考虑到一件事情首先\(u -> u\)是可行的. 所以其实对于\(f(u,G')\) 只要考虑\([1,u]\)的点. 那么考虑其条件等价于\(u -> i\) 和 \(i -> u ...
- [省选联考 2021 A/B 卷] 宝石
大概是一眼看出来是这个给定序列在树上序列上按顺序跑最大匹配. 然后考虑维护向上和向下的链的值. 大概的做法是用倍增维护,考虑\(f_{u,i}\)是\(c_u\)在序列里的位置向后匹配\(2^i\)位 ...
- [省选联考 2021 A 卷] 矩阵游戏
很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...
- 题解 P6622 [省选联考 2020 A/B 卷] 信号传递
洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...
- luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)
luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...
- luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)
luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分) Luogu 题外话1: LN四个人切D1T2却只有三个人切D1T1 很神必 我是傻逼. 题外话2: 1e6的数据直接i ...
- 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)
洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\) 算法通过,因此可以考虑 \(\mathcal O(n^2 ...
- 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)
题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...
随机推荐
- 【机器学习基础】逻辑回归——LogisticRegression
LR算法作为一种比较经典的分类算法,在实际应用和面试中经常受到青睐,虽然在理论方面不是特别复杂,但LR所牵涉的知识点还是比较多的,同时与概率生成模型.神经网络都有着一定的联系,本节就针对这一算法及其所 ...
- .NET CLI简单教程和项目结构
WHAT IS .NET CLI ? .NET 命令行接口 (CLI) 工具是用于开发.生成.运行和发布 .NET 应用程序的跨平台工具链. 来源:.NET CLI | Microsoft Docs ...
- 机器学习:SVM
SVM 前言:支持向量机(Support Vector Machine, SVM),作为最富盛名的机器学习算法之一,其本身是一个二元分类算法,为了更好的了解SVM,首先需要一些前提知识,例如:梯度下降 ...
- 提升使用Linux效率的小操作
提升使用Linux效率的小操作 保存更新? 本文记录了个人在使用Linux时觉得好用的一些快捷方式/功能: 为那种知道了能提高效率,但是的不知道也并没有影响的操作. 历史命令 该操作用于快速查看已使用 ...
- linux centos7 修改默认网卡命名规则为eth0脚本
CentOS6之前基于传统的命名方式如:eth1,eth0.... Centos7提供了不同的命名规则,默认是基于固件.拓扑.位置信息来分配.这样做的优点是命名是全自动的.可预知的,缺点是比eth0. ...
- 2021.1.8 NKOJ 周赛总结
意料之中..... A:nkoj 3900 AC小程序 http://oi.nks.edu.cn/zh/Problem/Details/3900 A题比较简单,单独分析一下A和C,其实就是一个斐波那契 ...
- vs2017和Qt5的字符编码问题
默认vs2017的源文件字符编码是gbk的格式,Qt5的内部字符编码为utf8的格式,Qt5又去掉了设置字符串的接口,这样在源文件中使用了字符串之后,就会出现乱码问题,对原有代码逐个修改字符串是不可能 ...
- dfs初步模板解析
#include<stdio.h> int a[10],book[10],n; //这里还有需要注意的地方C语言全局变量默认为0 void dfs(int step){ //此时在第ste ...
- i love dingning
"如果你爱一个人,不是下课给人家买买水,不是短信发来发去,也不是周末一起出来唱唱歌聊聊天吃吃饭,而是做一个出色的人.以后的以后,可能还有别的人爱她,你要做的,是把别人都比下去.你要变得优秀, ...
- Labview一个循环中放两个事件结构会导致前面板锁定的问题
建议在同一个循环中,只放置一个事件结构.此时,当一个事件发生时,事件结构将对事件进行处理,然后继续循环,事件结构再等待下一个事件发生. 如在同一个循环中放置两个事件结构,只有在两个事件结构都处理了事件 ...