第十三届蓝桥杯Java B 组国赛 C 题——左移右移(AC)
创始人
2024-05-26 16:11:37
0

目录

  • 1.左移右移
    • 1.题目描述
    • 2.输入格式
    • 3.输出格式
    • 4.样例输入
    • 5.样例输出
    • 6.数据范围
    • 6.原题链接
  • 2.解题思路
  • 3.Ac_code

1.左移右移

1.题目描述

小蓝有一个长度为 NNN 的数组, 初始时从左到右依次是 1,2,3,…N1,2,3, \ldots N1,2,3,…N 。

之后小蓝对这个数组进行了 MMM 次操作, 每次操作可能是以下 2 种之一:

  1. 左移 xxx, 即把 xxx 移动到最左边。

  2. 右移 xxx, 即把 xxx 移动到最右边。

请你回答经过 MMM 次操作之后, 数组从左到右每个数是多少?

2.输入格式

第一行包含 2 个整数, NNN 和 MMM 。以下 MMM 行每行一个操作, 其中 “LxLxLx "表示左移 xxx ,"RxRxRx "表示右移 xxx 。

3.输出格式

输出 NNN 个数, 代表操作后的数组。

4.样例输入

5 3
L 3
L 2
R 1

5.样例输出

2 3 4 5 1

6.数据范围

1≤N,M≤200000,1≤x≤N.1≤N,M≤200000,1≤x≤N.1≤N,M≤200000,1≤x≤N.

6.原题链接

左移右移

2.解题思路

  题目的含义非常简单,如果按照朴素的方式遍历寻找 xxx,然后直接进行插入操作,在nnn的级别在2e52e52e5的范围这时间复杂度显然是不可接受的。想要解决此题我们需要思考两个点:

  1. 如何高效地进行插入和删除操作
  2. 如何快速地找到某个点所在的位置

  对于第一点,我们应该快速地想到链表这个数据结构,由于题目需要在左端点和右端点都进行插入操作,所以我们应该联想到 双链表 。它可以在O(1)O(1)O(1)的时间范围内对元素进行插入和删除,这显然是我们需要的数据结构。
  当然,双链表并不支持高效地查找,所以我们如何快速找到 xxx 的位置呢?这时候我们应该联想到 哈希表,因为我们需要手动实现双链表,所以每个链表结点都对应一个值,同时它也是一个对象,我们可以使用哈希表,以值为keykeykey,以这个链表结点对象为valuevaluevalue。这样我们就可以快速获得这个结点,然后再进行常规的双链表插入删除操作。

3.Ac_code

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.*;public class Main {static Map map=new HashMap<>();static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();//双链表的头结点和尾结点Node head=new Node(-1,null,null);Node last=new Node(-1,null,null);Node pre=head;//构建双链表for (int i = 1; i <=n; i++) {pre.next=new Node(i,pre,null);pre=pre.next;map.put(i,pre);}last.pre=pre;pre.next=last;for (int i = 0; i < m; i++) {char c=sc.next().charAt(0);int x=sc.nextInt();//先将x对应的结点在双链表中删除Node node=map.get(x);node.pre.next=node.next;node.next.pre=node.pre;if (c=='L'){//将其插入到左端点node.next=head.next;head.next.pre=node;head.next=node;node.pre=head;}else{//将其插入到右端点node.pre=last.pre;last.pre.next=node;node.next=last;last.pre=node;}}pre=head.next;while (pre!=last){out.print(pre.v+" ");pre=pre.next;}out.flush();}static class Node{int v;Node pre;Node next;public Node(int v, Node pre, Node next) {this.v = v;this.pre = pre;this.next = next;}}
}

相关内容

热门资讯

“太棒了,我终于得上梅毒了!” 转自:深圳卫健委作者:大琳砸绘画:王劈柴如有需要请联系sns@guokr.com
故意使用本地方言制造性暗示、性... 近期,宜春市万载县网信办接到网民举报,自媒体账号“黄**杀”故意使用本地方言在某直播平台制造性暗示、...
陌生小孩子骂我打又不能打怎么办... 陌生小孩子骂我打又不能打怎么办?陌生小孩子骂我打又不能打怎么办,这样的小孩子的教育教育她,因为他是个...
中国圆号重奏团德国巡演奏响东方... 来源:中国新闻网 中新网柏林7月6电(记者 马秀秀)当地时间5日晚,中国圆号重奏团在德国柏林爱乐乐团...
航运效能大提升:全国电子航道图...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! IT之家 7 月 6...
破25亿元! 据网络平台数据截至7月6日12时35分2025年暑期档(6月—8月)总票房(含预售)突破25亿元!超...
罗马仕电芯供应商3C认证均撤销... 转自:贝壳财经 #罗马仕不少员工或被迫自离# 【#罗马仕电芯供应商3C认证均撤销或暂停#】风暴...
《太平广记》石_为什么鱼死尚能... 《太平广记》石_为什么鱼死尚能救活,修仙如此困难?因为修仙很是困难,而且很不容易成功。不是能救活鱼,...
女子吃冰激凌突发“脑结冰”!医... 高温之下,很多人会选择冰镇饮料、冰激凌等消暑,但吃“冰”也得讲究“科学性”,一味贪凉可能会伤身。近日...
7月6日,上海市花样滑冰集训队... 转自:上观新闻7月6日,上海市花样滑冰集训队新赛季出征仪式于上海市新国际博览中心ISPO展W5馆内圆...