CF1154E. Two Teams(双向链表,模拟)

博客介绍了CF1154E问题的解决策略,涉及两个领导者按能力值顺序挑选人员的模拟过程。通过转化为双向链表操作,每次选取最大值及其两侧k个人,直至所有人员分配完毕。文章提供了问题解析和相应的代码实现,重点在于双向链表的模拟。
摘要由CSDN通过智能技术生成

传送门:CF1154E. Two Teams

题意:给出n个人的能力值,且每个值互不相同,有两个序号为1和2的leader要挑人,每次的挑选都是先1后2,每次每个leader都会优先挑选能力值最大的人,以及这个人左右两侧各k个人(若不到k个则全部取完)直到所有人都被挑选完毕。输出每个选手会被分配到的leader序号。

解析:这个问题可以转化为一个序列每次取走最大的一个数以及这个数两侧k个数,直到序列长度为0,因此可以看作一个链表的模拟过程,每次取走一段后将这一段的前一个结点的尾指针指向这一段的后一个结点,以及将这一段的后一个结点的头指针指向这一段的前一个结点,这个过程可以用数组来模拟,定义l[i],r[i]数组分别表示当前下标为i的结点指向的后一位与前一位的结点的下标,是一道双向链表模拟的简单题。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
#include<vector>
#include<map>
#include<queue>

using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int maxn = 2e5+5;
int l[maxn]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值