CSU-1982 小M的移动硬盘

Description

最近小M买了一个移动硬盘来储存自己电脑里不常用的文件。但是他把这些文件一股脑丢进移动硬盘后,觉得这些文件似乎没有被很好地归类,这样以后找起来岂不是会非常麻烦?
小M最终决定要把这些文件好好归类,把同一类地移动到一起。所以现在小M有了这几种操作:
1 u 表示把编号为u的文件放到最上面
2 u 表示把编号为u的文件放到最下面
3 u v 表示把编号为u的文件放到编号为v的文件的后面
已知在最开始的时候,1号文件到n号文件从上往下排布
现在小M已经给出了他所进行的所有操作,你能告诉他操作之后的序列是会变成什么样子吗?

Input

第一行为一个数字T(T<=10)表示数据组数
第二行为两个数字n、m(1<=n,m<=300000)表示序列长度和小M的操作次数
接下来m行每行两个或三个数字,具体含义见题面
保证数据合法

Output

输出一行表示小M操作结束后的序列

Sample Input

1
10 5
1 5
2 3
2 6
3 4 8
3 1 3

Sample Output

5 2 7 8 4 9 10 3 1 6

题解

也是一道水题,但却WA了很多发,这题用数组模拟双向链表即可,先贴一开始WA的代码

#include<bits/stdc++.h>
#define maxn 300050
using namespace std;
struct node {int l, r;
} a[maxn];
int main() {int t;scanf("%d", &t);while (t--) {int n, m;scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {a[i].l = i - 1;a[i].r = i + 1;}int head = 1, tail = n;for (int i = 1; i <= m; i++) {int q;scanf("%d", &q);if (q == 1) {int x;scanf("%d", &x);if (x == head) continue;if (x == tail) tail = a[x].l;a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[head].l = x;a[x].l = 0;a[x].r = head;head = x;}if (q == 2) {int x;scanf("%d", &x);if (x == tail) continue;if (x == head) head = a[x].r;a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[tail].r = x;a[x].l = tail;a[x].r = n + 1;tail = x;}if (q == 3) {int x, y;scanf("%d%d", &x, &y);if (x == y) continue;if (x == head) {head = a[x].r;}if (y == tail) {tail = x;}a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[x].r = a[y].r;a[a[y].r].l = x;a[x].l = y;a[y].r = x;}}int now = head;for (int i = 1; i < n; i++) {printf("%d ", now);now = a[now].r;}printf("%d\n", now);}return 0;
}
/**********************************************************************Problem: 1982User: ArtoriaxLanguage: C++Result: WA
**********************************************************************/

这个代码只有一点没注意到,即在q==3时,x处于tail时也会导致tail变化,很容易想的一个点,但却WA了很多次,然后去网上搜题解,用a[0]表示链表头,用a[n + 1]表示表尾才AC, 之后对拍一发才发现这个愚蠢的错误。


网上题解版:

#include<bits/stdc++.h>
#define maxn 300050
using namespace std;
struct node {int l, r;
} a[maxn];
int main() {int t;scanf("%d", &t);while (t--) {int n, m;scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {a[i].l = i - 1;a[i].r = i + 1;}a[0].r = 1;a[n + 1].l = n;for (int i = 1; i <= m; i++) {int q;scanf("%d", &q);if (q == 1) {int x;scanf("%d", &x);a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[x].l = 0;a[x].r = a[0].r;a[a[0].r].l = x;a[0].r = x;}if (q == 2) {int x;scanf("%d", &x);a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[x].r = n + 1;a[x].l = a[n + 1].l;a[a[n + 1].l].r = x;a[n + 1].l = x;}if (q == 3) {int x, y;scanf("%d%d", &x, &y);if (x == y) continue;a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[x].r = a[y].r;a[a[y].r].l = x;a[x].l = y;a[y].r = x;}}int now = a[0].r;for (int i = 1; i < n; i++) {printf("%d ", now);now = a[now].r;}printf("%d\n", now);}return 0;
}
/**********************************************************************Problem: 1982User: ArtoriaxLanguage: C++Result: ACTime:556 msMemory:4368 kb
**********************************************************************/

自己改正版:

#include<bits/stdc++.h>
#define maxn 300050
using namespace std;
struct node {int l, r;
} a[maxn];
int main() {int t;scanf("%d", &t);while (t--) {int n, m;scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {a[i].l = i - 1;a[i].r = i + 1;}int head = 1, tail = n;for (int i = 1; i <= m; i++) {int q;scanf("%d", &q);if (q == 1) {int x;scanf("%d", &x);if (x == head) continue;if (x == tail) tail = a[x].l;a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[head].l = x;a[x].l = 0;a[x].r = head;head = x;}if (q == 2) {int x;scanf("%d", &x);if (x == tail) continue;if (x == head) head = a[x].r;a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[tail].r = x;a[x].l = tail;a[x].r = n + 1;tail = x;}if (q == 3) {int x, y;scanf("%d%d", &x, &y);if (x == y) continue;if (a[y].r == x) continue;if (x == head) {head = a[x].r;}if (x == tail) {tail = a[x].l;}if (y == tail) {tail = x;}a[a[x].l].r = a[x].r;a[a[x].r].l = a[x].l;a[x].r = a[y].r;a[a[y].r].l = x;a[x].l = y;a[y].r = x;}}int now = head;for (int i = 1; i < n; i++) {printf("%d ", now);now = a[now].r;}printf("%d\n", now);}return 0;
}
/**********************************************************************Problem: 1982User: ArtoriaxLanguage: C++Result: ACTime:560 msMemory:4368 kb
**********************************************************************/

转载于:https://www.cnblogs.com/artoriax/p/10349153.html

CSU-1982 小M的移动硬盘相关推荐

  1. 命令点亮硬盘灯_macOS下移动硬盘无法挂载且硬盘灯一直闪烁的解决方法

    致力于成为您终身的苹果管家 点击上方蓝字  关注我们 小编近日遇到一个诡异的问题,小编的移动硬盘不定期的会自动断开,提示未正常拔出,实际上一直没有动过连接线,然后硬盘一直处于未加载的状态,硬盘灯也一直 ...

  2. linux 移动硬盘 优化,不花一分钱,给移动硬盘加速

    最近很多小伙伴向小编抱怨移动硬盘速度太慢,其实只要一个小技巧,就能让移动硬盘加速,而且不用花一分钱哦. 首先,右键点击要加速的移动硬盘图标,选择"属性",在打开页面中选择" ...

  3. 怎么设置计算机硬盘密码,移动硬盘如何设置密码【操作步骤】

    我们在使用电脑工作的过程中时常会遇到各种奇奇怪怪的问题,比如最近就有不少用户来问小编关于移动硬盘如何设置密码的问题,于是小编就在网上查了一下移动硬盘如何设置密码的解决方法,其实移动硬盘如何设置密码操作 ...

  4. AirDisk存宝Q2 网盘转接器 移动硬盘伴侣NAS私有云

    首先我是通过朋友介绍然后到官网 www.airdisk.cc 查了了一下,才决定入手这个Q2,一次性买了两,上面东西还挺多. 包装 彩盒包装有的简单欠档次,不过不影响使用. 配件: 主机.电源适配器( ...

  5. 计算机可移动磁盘无法显示图片,移动硬盘显示不出来怎么办 移动硬盘不显示解决办法【详解】...

    随着我们生活对于高科技产品应用呢不断增多,电脑,作为一种能够在生活中提供帮助,在学习中获取课外知识,在工作和办公中能够提高工作效率的产品,它已经成为我们不可缺少的应用工具,硬盘,作为一种连接电脑的设备 ...

  6. macOS下移动硬盘无法挂载且硬盘灯一直闪烁的解决方法

    小编近日遇到一个诡异的问题,小编的移动硬盘不定期的会自动断开,提示未正常拔出,实际上一直没有动过连接线,然后硬盘一直处于未加载的状态,硬盘灯也一直闪烁不停. 通过重启的方法,有时候能使用,但一段时间后 ...

  7. 服务器加了内存和硬盘不显示不出来,移动硬盘显示不出来怎么办 移动硬盘不显示解决办法【详解】...

    随着我们生活对于高科技产品应用呢不断增多,电脑,作为一种能够在生活中提供帮助,在学习中获取课外知识,在工作和办公中能够提高工作效率的产品,它已经成为我们不可缺少的应用工具,硬盘,作为一种连接电脑的设备 ...

  8. 自己动手DIY 组装移动硬盘大比拼

    近期小编发现移动硬盘十分火热,网络的共享资源虽然丰富了我们的生活,但是也使我们的硬盘空间越来越小.移动储存的出现很好的缓解了这个问题. 目前,u盘和移动硬盘各占移动储存两大江山,市场的移动硬盘多采用2 ...

  9. 我们测了30款移动硬盘,却如此尴尬

    我最近在研究移动硬盘,如果你也感兴趣不妨来看看我这些天的研究成果吧.不卖关子,我们发现不同品牌SDD移动硬盘间存在着很大差异,如果你非常在意读写速度就需要慎重选择了:而不同品牌HDD移动硬盘间在速度上 ...

最新文章

  1. Oracle中的iot_type,oracle IOT表学习
  2. 数学建模题目及论文_三道适合作为试题的数学建模题目及其评分标准
  3. 一致性哈希算法----- 解决memecache 服务器扩容后的数据丢失。
  4. sql 数据库前两列值乘_数据库的基本概念:
  5. 联想sr950配置raid卡_联想ThinkServerrd服务器raid卡设置教程LSIiraid卡设置教程
  6. 分数的表示以及计算(c++)
  7. sourceforge_SourceForge依旧re憬未来
  8. php 计算每年春节日期,动态显示2019年农历春节倒计时—2019年1月21日23时45分
  9. Linux 命令(8)—— rz 命令与 sz 命令
  10. java.sql.SQLException: Access denied for user 'Administrator'@'localhost' (using password: YES)
  11. 整理一些js中常见的问题
  12. scrum角色及其职责介绍
  13. baacloud是正规软件吗_baacloud,
  14. 软件工程——第六次作业——团队作业
  15. sort目标跟踪算法
  16. 计算机盘快捷键,电脑键盘快捷键全解
  17. Unity之Touch触摸屏单指、多指触碰
  18. Mac电脑无线键盘失灵的解决方法
  19. 2019CCPC江苏南京女生赛 | 总结
  20. 吉信通短信接口(HTTP协议) java

热门文章

  1. SmartSVN:File has inconsistent newlines
  2. Nova 组件详解 - 每天5分钟玩转 OpenStack(26)
  3. 一起Polyfill系列:Function.prototype.bind的四个阶段
  4. 通用的权限管理系统发布
  5. JAVA单向链表实现
  6. Android Coding利器之掌握小技巧,助你Coding更上一层楼~
  7. Android WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法
  8. jvm fastdebug
  9. Servlet读取文件的最好的方式
  10. apache php mysql codeigniter smarty 记录方便查询