首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
我是二哈
浙江外国语学院 Java
发布于浙江
关注
已关注
取消关注
@tangren:
题解 | 国旗计划(倍增:区间最值)
国旗计划:原题链接题意: 输入:第一行给你一个n和m,n代表边防战士的人数,m代表总共有几个站点,接下来有n行,每行给你两个站点C和D,战士行走的区间为[C,D],区间会重叠,但不会完全覆盖。 输出:输出每个战士,在以他自身的区间为起点的前提下,至少需要多少人可以使战士之间行走的区间形成一个环。做题思路: 初步入手本题,可以想到如果要判断成环,最好的办法是将环拆分成链,即当右边的点小于左边的点时,说明该点跨过了环,因此将右边的点加上站点总数,即可生成假设在一条链上的两点间的距离。初始输入代码: cin >>n>>m; for (int i=1;i<=n;i++) { cin >>w[i].l>>w[i].r; //破环成链 if (w[i].r<w[i].l)w[i].r+=m; } 在生成完链后,题目要求也变成了找到覆盖3-10的这个区间,问题是该怎么求解,找到最少的人数去覆盖这个区间,这里可以先试用贪心的思想进行思考,因为战士之间的区间是不会完全覆盖的,所以只要每次是下一个选中区间的起点是当前区间中,最靠近选择区间末的区间,即可完成最少人数成环这一条件。 以此为依据,在原先来链的基础上,再copy(复制)一份每个区间都加上一个环时的情况,用以判断当区间跨过环时,存在2-5的区间,但无法求解的情况,同时,因为题目只规定了战士不会被完全覆盖,但其顺序可能是被打乱的,所以为了满足区间查找的单调性,对数组进行sort排序。改进后输入代码: //输入+处理 cin >>n>>m; for (int i=1;i<=n;i++) { //记录id,在输出结果时,是原序输出 w[i].id=i; cin >>w[i].l>>w[i].r; //破环成链 if (w[i].r<w[i].l)w[i].r+=m; } //起点排序 sort(w+1,w+n+1); //复制一份 n2=n*2; for (int i=n+1;i<=n2;i++) { w[i]=w[i-n]; w[i].l+=m; w[i].r+=m; } 接下来是查找区间,但注意,如果直接查找区间会导致是o(n^2)的时间复杂度,也就是超时,因此需要优化区间查找,为此,来到本次题解的重中之中,倍增(st)。 在使用倍增前,先了解倍增的使用条件:必须要有单调性,很显然,这个条件已经满足。 其次是倍增的原理:同二分一样,二分的作用是不断缩减数组,以此来找到需要的数,而倍增则是不断增大。它的运算原理可以参考二进制定理:2^n=2^(n-1)+2^(n-2)+...+2^0+1。 因此其运行规则为:先走2^n步,倘若大于等于数值则说明步数过多,倘若小于,将将步数加上2^n,加至最后,加起来的总步数会是要求步数-1的值。st的代码://贪心选择区间+st生成静态数据void st(){ //自建图: int next=1; //链上共n2条 for (int i=1;i<=n2;i++) { //找到每个区间离右端点最近的左端点所在的区间 while (next <= n2 && w[next].l<= w[i].r)next++; //记录区间 go[i][0]=next-1; } //倍增:i = 1,2,4,8,16..共 logn 次 for (int i=1;(1 << i)<=n;i++) { //枚举每条线段 for (int s=1;s<=n2;s++) { //若走2^3步,2^3= 2^2+2^2 //先从 s 到走2^2步到中转站 //再从中转站走2^2到终点 go[s][i]=go[go[s][i-1]][i-1]; } }} 构建完图后,即可运用图表进行求解每位士兵的最少人数,即st的调用。//st的使用 void getRes(int x){ //len为终点长度,该长度代表能否成环 //now为初始的节点 //ans记录人数,因为放入了自身的初始节点,所以人数至少为1 int len=w[x].l+m,now=x,ans=1; //i初始为log2(n),20是为了方便计算 for (int i=20;i>=0;i--) { //从大到小开始查找 int to=go[now][i]; //当to存在,长度在len内 if (to && w[to].r<len) { ans=ans+(1<<i); //累加跳过的区域 now=to;//从新位置开始 } } //记录时使用id记录人数,毕竟sort过了,但输出要使用原序列 //ans+1因为ans是小于len的,还无法成环, //但因为st性质,他的下一步必定大于len,此时可以成环 res[w[x].id]=ans+1;} 最后直接输出存入的数值,即可得出答案,这里直接放ac代码:#include <bits/stdc++.h>using namespace std;const int maxn = 4e5 + 10;int n, n2, m;struct Index{ int id,l,r;//编号+区间 //以起始点小的排序 bool operator<(const Index &b) const { return l< b.l;}};Index w[maxn*2];//破环成链,因此空间需要开两份int go[maxn][25];//倍增记录自建图int res[maxn];//记录结果//贪心选择区间+st生成静态数据void st(){ //自建图: int next=1; //在链上选择共n2条 for (int i=1;i<=n2;i++) { //每个区间的下一个右端点最大的区间 while (next <= n2 && w[next].l<= w[i].r)next++; //区间i的下一个区间 go[i][0]=next-1; } //倍增:i = 1,2,4,8,16..共 logn 次 for (int i=1;(1 << i)<=n;i++) { //枚举每条线段 for (int s=1;s<=n2;s++) { //若走 2^3 步,2^3= 2^2+2^2 //先从 s 到走2^2步到中转站 //再从中转站走2^2到终点 go[s][i]=go[go[s][i-1]][i-1]; } }}//st的使用 void getRes(int x){ //len为终点长度,该长度代表能否成环 //now为初始的节点 //ans记录人数,因为放入了自身的初始节点,所以人数至少为1 int len=w[x].l+m,now=x,ans=1; //i初始为log2(n),20是为了方便计算 for (int i=20;i>=0;i--) { //从大到小开始查找 int to=go[now][i]; //当to存在,长度在len内 if (to && w[to].r<len) { ans=ans+(1<<i); //累加跳过的区域 now=to;//从新位置开始 } } //记录时使用id记录人数,毕竟sort过了,但输出要使用原序列 //ans+1因为ans是小于len的,还无法成环, //但因为st性质,他的下一步必定大于len,此时可以成环 res[w[x].id]=ans+1;}int main(){ //输入+初步处理 cin >>n>>m; for (int i=1;i<=n;i++) { w[i].id=i; cin >>w[i].l>>w[i].r; //破环成链 if (w[i].r<w[i].l)w[i].r+=m; } //起点排序 sort(w+1,w+n+1); //复制一份 n2=n*2; for (int i=n+1;i<=n2;i++) { w[i]=w[i-n]; w[i].l+=m; w[i].r+=m; } //倍增(st)开始 st(); //循环得出每个节点的最少成环人数 for (int i=1;i<=n;i++)getRes(i); //输出答案 for (int i=1;i<=n;i++)cout <<res[i]<<" "; cout <<"\n"; return 0;}
点赞 1
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 13:28
已编辑
牛客小助手
5.6-5.10 每日更新丨全网春招&实习招聘信息汇总
【校招日程】专栏汇集全网最新招聘信息,面向25、26届、27届,互联网、硬件、机械、产运 等各类最新秋招/寒假实习 招聘信息和内推码每个工作日持续更新,所有牛友均可免费订阅!招聘详情请查看:https://www.nowcoder.com/jobs/school/schedule5月6日公司名称招聘批次网申时间招聘岗位工作地点投递地址内推地址成都高新科技创新投资发展集团26春招4.28-5.09投融资专员、信息化管理、客户经理、初级投资经理等成都点击查看暂无华钦科技集团27提前批4.29-5.29IT工程师广州、深圳点击查看暂无安道26春招4.29-5.31建筑设计、景观设计、空间设计、城乡规...
点赞
评论
收藏
分享
05-04 17:25
兰州大学 C++
腾讯客户端开发一面面经
腾讯客户端开发一面面经 关于招聘岗位有没有不清楚的地方? 请先做一个自我介绍。 C++中的多态你是如何理解的?多态是如何实现的,细节有哪些? 如果类有派生关系,父类和子类的构造函数和析构函数调用顺序是怎样的? 设计模式你有用过吗?了解哪些设计模式? 能简单讲一下单例模式和观察者模式是什么吗?分别在什么场景下使用? const 有什么作用? 简要回答: const 用于声明变量为只读,即其值不能被修改。在成员函数后加 const 表示该函数不会修改类的成员变量(非静态)。还可以用于函数参数、返回值等,提高代码安全性和可读性。 详细回答: const 是 C++ 中的类...
查看27道真题和解析
点赞
评论
收藏
分享
04-04 01:46
深圳职业技术学院 护士
去字节 跳着跳着疯了
我朋友接了美团,后面又拿了字节,跑去字节提前实习,天天抑郁症,天天内耗,哎,字节毁了一个年轻人,哎,还不如去美团蹲着
爱读书的小章鱼很爱吃:
感觉你比字节还能压力
点赞
评论
收藏
分享
04-15 15:44
门头沟学院 广告设计
我的大厂老妈之小厂风波
我妈是某上市公司的老员工,她知道我秋招没找到工作,春招还去一家小公司干,表示不解,让我去他们公司干,我说我不想干制造业这一块,虽然他们公司股价上个月已经起飞了,当然我没买。我妈很反对我搞理财相关。她觉得我一个人在上海打工钱少又照顾不了自己,也非常反对我养猫,但这样的她还是在亲戚批评我养猫脏的时候反击了,说我爱干净每天洗猫(实则没有)。她说我们公司不行,但当知道我们有文化衫的时候,又认可说有企业文化的公司是好公司。哈哈。
牛客17492028...:
羡慕好妈妈
父母问你工作找得怎么样,...
点赞
评论
收藏
分享
05-07 09:22
北京邮电大学 嵌入式工程师
26嵌入式软件实习一周总结
本人26届硕士应届生,秋招签了家公司的嵌入式岗,主要做Linux开发,目前已经提前入职实习一周啦,来记录一下这段时间的真实感受,顺便把秋招经验复盘给后来的同学。先聊聊公司体感总的来说氛围还是不错的,有问题直接问同事都会耐心解答,不会有那种"自己查文档去"的冷脸,这点对新人来说真的太重要了。Mentor人也很好,去的第一周就请喝饮料、请吃饭,带我熟悉环境,介绍部门的人,完全没有那种"职场老油条"的距离感。第一周主要是看技术文档,理解公司产品的业务逻辑和整体框架,然后基于Linux做应用开发。说实话,看了一周文档,头是真的疼——公司的代码量很大,模块之间互相...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
毕业啦!我们要一起去广州打拼啦!
2.1W
2
...
毕业了,有些话只能藏在心里了
1.8W
3
...
2026春招到底卷成什么样了?填问卷说出真相,最高领200元现金红包
1.3W
4
...
百度又放大招了:实习生薪资全面提升,最高涨110%
9142
5
...
恒生春招
9088
6
...
从阿里被裁到快手升P6,我花了四年
7850
7
...
别人:阿里 字节 腾讯
7530
8
...
大三下了 学校不放实习怎么办
6534
9
...
在携程的一天
6226
10
...
Agent开发实习一面分享-字节
6226
创作者周榜
更多
正在热议
更多
#
这个offer值得去吗?
#
33033次浏览
235人参与
#
校招薪资来揭秘
#
961354次浏览
4063人参与
#
在爱玛,骑向未来
#
20914次浏览
412人参与
#
如果春招能重来,我会___
#
30128次浏览
301人参与
#
24秋招避雷总结
#
1020530次浏览
7098人参与
#
你会因为行情,降低找工作标准吗?
#
46038次浏览
334人参与
#
机械人还在等华为开奖吗?
#
339347次浏览
1652人参与
#
米哈游求职进展汇总
#
688926次浏览
3348人参与
#
华为池子有多大
#
178355次浏览
931人参与
#
26届春招投递记录
#
8847次浏览
72人参与
#
25届网易互娱暑实进度
#
109176次浏览
802人参与
#
通信/硬件求职避坑tips
#
172242次浏览
1170人参与
#
记录我的毕业季
#
5105次浏览
121人参与
#
机械人,你的秋招第一份简历被谁挂了
#
268900次浏览
2451人参与
#
远程面试的尴尬瞬间
#
364029次浏览
2062人参与
#
大学最后一个寒假,我想……
#
103363次浏览
846人参与
#
机械求职避坑tips
#
103772次浏览
589人参与
#
你认为小厂实习有用吗?
#
145180次浏览
763人参与
#
运营商笔面经互助
#
219778次浏览
1833人参与
#
美团秋招笔试
#
216633次浏览
1192人参与
#
网易求职进展汇总
#
213265次浏览
1524人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务