2020年4月月赛乙组 T1.伙伴

简介: 2020年4月月赛乙组 T1.伙伴

2020年4月月赛乙组 T1.伙伴

内存限制: 256 Mb时间限制: 1000 ms

题目描述

有 n 名士兵参加了一场激烈的战斗。每个士兵身边有两个伙伴,第 i 号士兵的左侧伙伴编号为 i−1,右侧伙伴的编号为和 i+1。1 号士兵没有左侧伙伴,n 号士兵没有右侧伙伴。

在战斗过程中,陆续牺牲了 m 名士兵。一旦一名士兵牺牲了,存活的士兵就会相互接近,形成新的伙伴关系。给定士兵们牺牲的顺序及编号,请你输出当每个士兵牺牲时,新构成伙伴关系的两个士兵的编号。

输入格式

第一行:两个正整数表示 n 和 m。

第二行到第 m+1 行:在第 i+1 行,有一个正整数 si ,表示第 i 个牺牲的士兵编号。

输出格式

共 mm 行:每行两个整数,第 ii 行表示当 si 牺牲时,左右伙伴的编号,如果某侧没有伙伴,输出一个 *。

数据范围

对于 30% 的数据,1≤n≤10000;

对于 60% 的数据,1≤n≤100000;

对于 100% 的数据,1≤n≤1000000,1≤m<n。

样例数据

输入:

5 3

3

2

1

输出:

2 4

1 4

* 4

这是一道挺好的链表模拟题  对于初学链表的同学 难度不大也容易理解。

解题思路一  数组暴力模拟

建立数组模拟每一个士兵的状态,0为存活,1为牺牲,每次查找都搜索他左侧第一个存活的士兵和右侧第一个存活的士兵。

时间复杂度为平方级别。能够拿到60分。

1. #include<bits/stdc++.h>
2. using namespace std;
3. int a[1000005];
4. int main()
5. {
6.  int n,m,t;
7.  cin>>n>>m;
8.  while(m--){
9.    cin>>t;
10.     int i=t-1;
11.     while(a[i]>=1&&a[i]!=0)i--;
12.     if(i<1) cout<<"* ";
13.     else cout<<i<<" ";
14.     i=t+1;
15.     while(a[i]<=n&&a[i]!=0)i++;
16.     if(i>n) cout<<"*"<<endl;
17.     else cout<<i<<endl;
18.     a[t]=1;
19.   }
20.   return 0;
21. }

解题思路二 模拟双向链表

根据相同的原理,我们可以给每个士兵都分配两个值:左边(前面)的士兵和右边(后面)的士兵。

当一个士兵牺牲时,更新他左边士兵的右边士兵为他的右边士兵和他右边士兵的左边士兵为他的左边士兵。

在输入时,只需根据对应的下标访问就可以了。

总体的时间复杂度降到了O(n)。能够拿到100分。

1. #include<bits/stdc++.h>
2. using namespace std;
3. struct Nod{
4.  int lf,rt;
5. }a[1000005];
6. int main()
7. {
8.  int n,m,t;
9.  cin>>n>>m;
10.   for(int i=1;i<=n;i++){
11.     a[i].lf=i-1;
12.     a[i].rt=i+1;
13.   }
14.   while(m--){
15.     cin>>t;
16.     if(a[t].lf==0) cout<<"* ";
17.     else cout<<a[t].lf<<" ";
18.     if(a[t].rt==n+1)cout<<"*"<<endl;
19.     else cout<<a[t].rt<<endl;
20.     a[a[t].rt].lf=a[t].lf;
21.     a[a[t].lf].rt=a[t].rt;
22.   }
23.   return 0;
24. }


相关文章
|
2月前
|
人工智能 新能源 BI
关于举办“2024年第四届全国大学生技术创新创业大赛”的通知
中国技术创业协会企业市场融通工作委员会将举办“2024年第四届全国大学生技术创新创业大赛”。大赛以“创新驱动,赋能就业”为目标,促进学生的创新创造能力,普及创新创业知识,拓宽就业创业渠道,挖掘创新人才,培育多元化的未来产业推进力量。
111 0
来听听阿里云伙伴们的心里话
来听听阿里云伙伴们的心里话
85 0
|
人工智能 新能源 区块链
|
运维 安全 Linux
“互联网+”大学生创新创业大赛来了,欢迎报名龙蜥社区赛题!
“互联网+”大学生创新创业大赛已开启报名!龙蜥社区设有 2 个赛题,戳原文点击了解~
“互联网+”大学生创新创业大赛来了,欢迎报名龙蜥社区赛题!
第八届“互联网+”大赛阿里云7大方向 32道命题邀你来创
今年互联网+大赛企业赛道发布了很多题目,这些题目都是阿里等大公司出题,很多题目非常适合我们组织研究生参赛。因为我们研究生和校企合作体量都很大。这方面的成绩也是支撑我们学院研究生培养质量特别是专业学位培养成果的重要体现。请各位老师抽空看看赛题,积极发动学生组队参加。
535 0
第八届“互联网+”大赛阿里云7大方向 32道命题邀你来创
|
人工智能
2019科技创新创业高峰论坛即将举办,三大看点抢先看
记者最新消息,在2019年“全国双创周”活动期间,以“科技引领,双创升级”为主题的2019科技创新创业高峰论坛将于6月13日在双创周主会场浙江省杭州市梦想小镇国际会议中心举办。
|
新零售 小程序 机器人
创业明星|宇链科技罗骁:成为10%走出重围挖“金子”的人
正如《蝙蝠侠:黑暗骑士》中双面人信仰的硬币一样,凡事都存在两面性。区块链、虚拟货币,这条通向财富市场的“捷径”,很多人的人生在这个路口发生改变。有的人操盘空气货币,赢得财富的同时也看似“翻盘人生”;但也有人站在时代的岔口,提出了“基于区块链+芯片的可信数据基础设施”的概念。本期创业明星人物是赛道明星学员——罗骁。
创业明星|宇链科技罗骁:成为10%走出重围挖“金子”的人
|
新零售 人工智能 网络安全
2020春季创业节公益云路演直播--起行资本专场,今晚继续
全国甄选核心赛道优秀企业,与知名投资机构、优秀创业项目一起,复苏新生,锐意前行。
2020春季创业节公益云路演直播--起行资本专场,今晚继续
阿里巴巴创业者基金/汇丰JUMPSTARTER环球创业比赛
阿里巴巴创业者基金/汇丰JUMPSTARTER环球创业比赛,深圳、吉隆坡、伦敦、旧金山湾区、多伦多及香港初赛分场精彩实况,北京、上海分场持续报名中...

热门文章

最新文章