ZJSU五月多校合训
强度焦虑制造者
具体而言,zszz3在每个游戏版本中都会推出一名新角色,或加强一名旧角色。玩家必须将这名新角色或 被加强的旧角色编入队伍,否则就会落后于版本。
而编队数量是有限的,这意味着玩家可能不得不踢出一名编队中现有的角色。而若被加强的角色恰好在 玩家的编队中,则可以开心游戏,什么都不用做。
你的舅舅是这家游戏公司的员工,他拿到了策划在未来\(n\)个版本的规划,现在你可以决定每个版本被你 踢出队伍的角色,使得总的踢人次数最少。
题解:贪心 + 模拟
- 我们每次踢出的人是下次加强最迟的人
- 我们不妨将每个角色被加强的时间段利用队列存放起来
- 我们维护一个大根堆的集合,每次删除下次加强最迟的角色
- 注意如果有个被加强的角色在编队中,我们也需要在集合中更新该角色下一次被加强的时间
- 注意如果集合的大小就是编队中现有角色的多少,如果编队中角色的数量没有到达上限,我们不需要踢出人,只需要更新该角色下一次被加强的时间即可
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 3e5 + 10, M = 4e5 + 10;
int n, k;
int a[N];
queue<int> q[N];
set<pii, greater<pii>> st;
map<int, bool> mp;
void solve()
{
cin >> n >> k;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
mp[a[i]] = false;
q[a[i]].push(i);
}
int ans = 0;
for (int i = 1; i <= n; ++i)
{
if (mp[a[i]])
{
st.erase(st.lower_bound(mpk(q[a[i]].front(), a[i])));
q[a[i]].pop();
if (q[a[i]].size())
st.insert({q[a[i]].front(), a[i]});
else
st.insert({INF, a[i]});
continue;
}
if (st.size() < k)
{
mp[a[i]] = true;
q[a[i]].pop();
if (q[a[i]].size())
st.insert({q[a[i]].front(), a[i]});
else
st.insert({INF, a[i]});
}
else
{
q[a[i]].pop();
int u = st.begin()->second;
st.erase(st.begin());
mp[u] = false;
mp[a[i]] = true;
if (q[a[i]].size())
st.insert({q[a[i]].front(), a[i]});
else
st.insert({INF, a[i]});
ans++;
}
}
cout << ans << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
return 0;
}
EASY XOR PROBLEM
LGXXGL想要构造一个\(0到2^n-1\)的排列\(p\),使得\(sum = \sum_{i=1}^{2^n-1}p_i \bigoplus p_{i-1}\)最小,输出\(sum\)对\(998244353\)取模的结果
题解:思维
- 我们不妨先考虑最高位,想要贪心的使得最高位异或后的\(1\)最少
- 我们可以将最高位有没有1的数分为两组,每组个数为\(2^{n-1}\),这样的话只会产生1个最高位的1,也就是在两个组交界的地方,对答案的贡献为\(2^{n-1}\)
- 按照这种思想我们考虑倒数第二位,容易发现,我们可以在原先分组的基础上每组之间再分成两组,那么对答案的贡献为\(2^{n-2}\times2=2^{n-1}\)
- 依次类推,我们发现\(sum = 2^{n-1}\times n\)
- 利用快速幂得到答案即可
ZJSU五月多校合训的更多相关文章
- 多校寒训TaoTao要吃鸡dp
题目描述 Taotao的电脑带不动绝地求生,所以taotao只能去玩pc版的荒野行动了, 和绝地求生一样,游戏人物本身可以携带一定重量m的物品,装备背包 之后可以多携带h(h为0代表没有装备背包)重量 ...
- 前台给后台传JSON字符串,后台解析并保存
前台 function BMSure() { var DanWeiName = $("[id$='BusinessName']").val(); var Address = $(& ...
- 牛客-2018多校算法第五场D-集合问题+并查集
集合问题 题意: 给你a,b和n个数p[i],问你如何分配这n个数给A,B集合,并且满足: 若x在集合A中,则a-x必须也在集合A中. 若x在集合B中,则b-x必须也在集合B中. 思路:并查集操作,自 ...
- 自律训练法 John Sehorz
自律训练法,系1932年由德国精神医学医师John Sehorz所创立.他研究人们在催眠催眠状态下,所呈现的生理状态,如:沉重与温暖感.. ,因而,John Sehorz改以「逆向操作」之方式,由自我 ...
- 牛客网暑期ACM多校训练营(第一场)I Substring
题意:给你一个只有abc的字符串,求不相同的子串,(不同构算不同,例如aba和bab算同构) 题解:很显然,如果不考虑同构的问题,我们直接上sa/sam即可,但是这里不行,我们考虑到只有abc三种字符 ...
- “融而开放、合以创新”T-HIM融合通信技术开发实战
本文来自腾讯云技术沙龙,本次沙龙主题为T-HIM融合通信技术开发实战 2018年,企业的数字化转型大规模兴起,"数字化经济"时代来临.如何利用数字化技术来支持业务的转型.增长与创新 ...
- [转] Raspberry Pi 樹莓派使用場合及時機
在買了 Raspberry Pi 後,到底能拿來做什麼事情呢?有幾個想法一起分享 這裡有初學者教學的影片,非常值得一看. http://www.youtube.com/user/Raspberry ...
- 日语能力考试N2必备训读动词
日语能力考试N2必备训读动词 ア合う——あう——「自」合一.合到一起.准确味わう——あじわう——「他」品味.品尝預かる——あずかる——「他」照顾.保管.承担預ける——あずける——「他」寄存.处理难以了 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap
一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...
随机推荐
- ansible rpm包下载
Ansible2.9.18版本下载链接:https://pan.baidu.com/s/1dKlwtLWSOKoMkanW900n9Q 提取码:ansi 将软件上传至系统并解压安装: # tar -z ...
- Transforms的使用
Transform的作用 把图片经过Transforms的一些函数之后就会对图片进行一些变化.比如,resize就是改变其大小,totensor就是把图片PIL或者numpy类型转化为Tensor类型 ...
- [JS设计模式]:鸭子类型与多态
鸭子类型 编程语言按照数据类型大体可以分为两类,一类是静态类型语言,另一类是动态类型语言. 动态类型语言对变量类型的宽容给实际编码带来了很大的灵活性.由于无需进行类型检测,我们可以尝试调用任何对象的任 ...
- Asp.net core 学习笔记 Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇
更新 30-04-2023 最新版本请看这 2 篇 ASP.NET Core – User Secret & Azure Key Vault 之前有写过 2 篇关于 key-vault 和 d ...
- 强!推荐一款Python开源自动化脚本工具:AutoKey!
1.前言 在数字化时代,自动化工具成为了提升工作效率和生产力的重要手段.Python作为一种广泛使用的编程语言,以其强大的功能和易用性受到许多开发者的青睐. 而今天给大家推荐一款开源的自动化脚本工具: ...
- QT硬件通讯基础
QT硬件通讯基础 使用AI技术辅助生成 1 QT与硬件通讯概述 1.1 QT硬件通讯的基本概念 1.1.1 QT硬件通讯的基本概念 QT硬件通讯的基本概念 QT硬件通讯的基本概念 QT作为一种跨平台的 ...
- [TK] Rudolf and Subway ( CodeForces #933 div.3 - G )
形式化题意 给定一个带权无向图,求从 \(s\) 点到 \(e\) 点的路径上途径边权种类的最小值. 思路 题图 我们把边权种类相同的点连成的子图抽象成一个 "平台" ,从题目给我 ...
- Dos常用命令 - Dir
Dos命令,用于扫描当前目录创建目录清单 dir /s /b /ad >> "目录清单.txt" 解释: 将 dir /s /b /ad 生成的目录 追加写入目录清单. ...
- 【赵渝强老师】阿里云大数据ACP认证之阿里大数据产品体系
阿里大数据产品体系是基于阿里云飞天平台上的数据处理服务.主要分为阿里云大数据基础产品和阿里云数加平台,其产品架构图如下所示: 一.阿里云大数据基础产品 1.云数据库--RDS(ApsaraDB for ...
- string的find()与npos
在 C++ 中,std::string::find() 是一个用于在字符串中查找子字符串或字符的成员函数.查找成功时返回匹配的索引位置,查找失败时返回 std::string::npos,表示未找到. ...