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. }


相关文章
|
Cloud Native 中间件 Serverless
2023 云原生编程挑战赛收官:1.8 万人报名,冠军花落北京邮电大学、电子科技大学、旷识科技
2023 云原生编程挑战赛收官:1.8 万人报名,冠军花落北京邮电大学、电子科技大学、旷识科技
2023 云原生编程挑战赛收官:1.8 万人报名,冠军花落北京邮电大学、电子科技大学、旷识科技
|
SQL Rust Cloud Native
【参赛有奖】云原生编程挑战赛·赛道 2 邀你来战!
【参赛有奖】云原生编程挑战赛·赛道 2 邀你来战!
来听听阿里云伙伴们的心里话
来听听阿里云伙伴们的心里话
70 0
|
人工智能 算法 大数据
深智恒际斩获阿里云产品生态伙伴“成长进步奖”!
11月5日,以“计算·进化·未来”为主题的2022云栖大会在杭州云栖小镇隆重举办,大会汇聚众多重磅行业领军人物和专家学者,阿里云产品伙伴发展论坛也在大会现场举行。
166 1
深智恒际斩获阿里云产品生态伙伴“成长进步奖”!
|
人工智能 新能源 区块链
|
小程序 前端开发 定位技术
首届腾讯云公益编程挑战赛收官,云开发助力公益项目高效落地
首届腾讯云公益编程挑战赛收官,云开发助力公益项目高效落地
254 0
首届腾讯云公益编程挑战赛收官,云开发助力公益项目高效落地
第八届“互联网+”大赛阿里云7大方向 32道命题邀你来创
今年互联网+大赛企业赛道发布了很多题目,这些题目都是阿里等大公司出题,很多题目非常适合我们组织研究生参赛。因为我们研究生和校企合作体量都很大。这方面的成绩也是支撑我们学院研究生培养质量特别是专业学位培养成果的重要体现。请各位老师抽空看看赛题,积极发动学生组队参加。
525 0
第八届“互联网+”大赛阿里云7大方向 32道命题邀你来创
|
边缘计算 人工智能 算法
阿里巴巴云游戏平台荣获首届高新视频创新应用大赛一等奖
5月27日,由国家广电总局举办的首届高新视频创新应用大赛结果于第28届中国国际广播电视信息网络展览会(CCBN2021)主题报告会正式揭晓。阿里巴巴凭借“云游戏PaaS平台”荣获高新视频创新应用大赛“云游戏类”一等奖。
2295 0
阿里巴巴云游戏平台荣获首届高新视频创新应用大赛一等奖
赢万元好礼,首届宜搭应用创新大赛来啦!
只要会电脑,你就会开发 5分钟开发一款应用不是梦 首届宜搭应用创新大赛来了,诚邀您来参加!
2736 0
赢万元好礼,首届宜搭应用创新大赛来啦!
阿里巴巴诸神之战山东站暨智汇谷创新创业大赛举行首场海选
12月19日,阿里巴巴诸神之战山东站暨智汇谷创新创业大赛首场“海选赛”在聊城正式举行,共有14支团队从近百家报名团队中获得公开路演的资格。
阿里巴巴诸神之战山东站暨智汇谷创新创业大赛举行首场海选