当前位置: 首页 > article >正文

lanqiaoOJ 3255:重新排队 ← STL list 单链表

【题目来源】
https://www.lanqiao.cn/problems/3255/learning/

【题目描述】
给定按从小到大的顺序排列的数字 1 到 n,随后对它们进行 m 次操作,每次将一个数字 x 移动到数字 y 之前或之后。请输出完成这 m 次操作后它们的顺序。

【输入格式】
第一行为两个数字 n, m,表示初始状态为 1 到 n 的从小到大排列,后续有 m 次操作。
第二行到第 m+1 行,每行三个数 x, y, z。当 z=0 时,将 x 移动到 y 之后;当 z=1 时,将 x 移动到 y 之前。


【输出格式】
一行,n 个数字,中间用空格隔开,表示 m 次操作完成后的排列顺序。

【输入样例】
5 3
3 1 0
5 2 1
2 1 1

【输出样例】
2 1 3 5 4

【算法分析】
★ 在大多数情况下,可以直接使用 C++ 中的 STL list,而不需手写链表。通过这种方式完成的代码通常更简洁。本例代码中将会使用 list<int>::iterator it=find(ls.begin(),ls.end(),y); 得到 y 的位置。

★ STL list:https://cplusplus.com/reference/list/
(1)
size():Returns the number of elements in the list container.
(2)
empty():Returns whether the list container is empty (i.e. whether its size is 0).
(3)
push_front():Inserts a new element at the beginning of the list, right before its current first element. 
(4)
push_back():Adds a new element at the end of the list container, after its current last element. 
(5)
pop_front():Removes the first element in the list container, effectively reducing its size by one. 
(6)
pop_back():Removes the last element in the list container, effectively reducing the container size by one.
(7)
front():Returns a reference to the first element in the list container.
(8)
back():Returns a reference to the last element in the list container.
(9)
reverse():Reverses the order of the elements in the list container.
(10)
insert():The container is extended by inserting new elements before the element at the specified position.
(11)
erase():Removes from the list container either a single element (position) or a range of elements ([first,last)).
(12)
unique():Notice that an element is only removed from the list container if it compares equal to the element immediately preceding it. Thus, this function is especially useful for sorted lists.

【算法代码】

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n,m;
    cin>>n>>m;

    list<int> ls;
    for(int i=1; i<=n; i++) {
        ls.push_back(i);
    }

    while(m--) {
        int x,y,z;
        cin>>x>>y>>z;
        ls.remove(x);
        list<int>::iterator it=find(ls.begin(),ls.end(),y);
        if(z==0) ls.insert(++it,x);
        if(z==1) ls.insert(it,x);
    }

    for(auto i:ls) cout<<i<<" ";
    cout<<endl;

    return 0;
}

/*
in:
5 3
3 1 0
5 2 1
2 1 1

out:
2 1 3 5 4
*/



【参考文献】
https://blog.csdn.net/mc10141222/article/details/123674677
https://cplusplus.com/reference/list/list/



 


http://www.kler.cn/a/375516.html

相关文章:

  • 什么是制造项目管理?
  • <HarmonyOS第一课>应用/元服务上架的课后习题
  • 使用linuxdeployqt打包Qt程序问题及解决方法
  • 应用层知识点总结1
  • 服务器宝塔安装哪吒监控
  • K8S nginx pod结合cronJob实现日志按天切割 —— 筑梦之路
  • 【贪心算法】(第十三篇)
  • Linux---cp命令
  • 【p2p、分布式,区块链笔记 Torrent】WebTorrent 的lt_donthave插件
  • 软件测试学习笔记丨Flask操作数据库-数据库和表的管理
  • MySQL utf8mb3 和 utf8mb4引发的问题
  • 前端八股文第七篇
  • .net core NPOI以及NOPI mapper
  • HTML的总结作业
  • 简单的kafkaredis学习之kafka
  • 5G(NR)无线协议层二的RLC子层
  • Python 网络爬虫教程:从入门到高级的全面指南
  • 51c~C语言~合集1
  • 界面控件DevExpress JS ASP.NET Core v24.1亮点 - 支持Angular 18
  • 日志代码编写
  • 基于AI大模型的复杂扫描件PDF信息提取与规整
  • 基于SpringBoot+Vue的购物商城系统【前后端分离】
  • 江协科技STM32学习- P28 USART串口数据包
  • 【进阶sql】复杂sql收集及解析【mysql】
  • 【Java SpringIOC与ID随感录】 基于 XML 的 Bean 装配
  • vue3官方示例-简单的 markdown 编辑器。