题目描述

题目位置:uva12657

You have n boxes in a line on the table numbered 1 . . . n from left to right. Your task is to simulate 4 kinds of commands:

• 1 X Y : move box X to the left to Y (ignore this if X is already the left of Y )

• 2 X Y : move box X to the right to Y (ignore this if X is already the right of Y )

• 3 X Y : swap box X and Y

• 4: reverse the whole line. Commands are guaranteed to be valid, i.e. X will be not equal to Y . For example, if n = 6, after executing 1 1 4, the line becomes 2 3 1 4 5 6. Then after executing 2 3 5, the line becomes 2 1 4 5 3 6. Then after executing 3 1 6, the line becomes 2 6 4 5 3 1. Then after executing 4, then line becomes 1 3 5 4 6 2

Input There will be at most 10 test cases. Each test case begins with a line containing 2 integers n, m (1 ≤ n, m ≤ 100, 000). Each of the following m lines contain a command. Output For each test case, print the sum of numbers at odd-indexed positions. Positions are numbered 1 to n from left to right.

Sample Input

6 4

1 1 4

2 3 5

3 1 6

4

6 3

1 1 4

2 3 5

3 1 6

100000 1

4

Sample Output

Case 1: 12

Case 2: 9

Case 3: 2500050000

上面简单的中文翻译

表上一行有n个框,编号为1。n从左到右。您的任务是模拟4种命令:

•1 X Y:将方框X向左移动到Y(如果X已经是Y的左边,则忽略此项)

•2 X Y:将方框X向右移动到Y(如果X已经是Y的右边,则忽略此项)

•3 X Y:交换盒X和Y

•4:反转整条线路。命令保证有效,即X不等于Y。例如,如果n=6,则在执行1 1 4之后,该行变为2 3 1 4 5 6。然后在执行2 3 5之后,该行变为2 1 4 5 3 6。然后在执行3 1 6之后,该行变为2 6 4 5 3 1。然后在执行4之后,行变为1 3 5 4 6 2

输入最多将有10个测试用例。每个测试用例以一行开始,该行包含2个整数n,m(1≤n,m≤100000)。以下m行中的每一行都包含一个命令。输出对于每个测试用例,在奇数索引位置打印数字的总和。位置从左到右编号为1到n。

题目分析

有一篇文章就是说的比较透彻了

具体的一个讲解

其实就是说,这里用数组模拟了一个循环双向链表,是不一定用指针操作的

大致说两点

具体代码实现

demo2.cpp

#include<cstdio>
#include<algorithm>
using namespace std;const int maxn = 100000 + 5;
int n, left[maxn], right[maxn];inline void link(int L, int R) {right[L] = R; left[R] = L;
}int main() {int m, kase = 0;while(scanf("%d%d", &n, &m) == 2) {for(int i = 1; i <= n; i++) {left[i] = i-1;right[i] = (i+1) % (n+1);}right[0] = 1; left[0] = n;int op, X, Y, inv = 0;while(m--) {scanf("%d", &op);if(op == 4) inv = !inv;else {scanf("%d%d", &X, &Y);if(op == 3 && right[Y] == X) swap(X, Y);if(op != 3 && inv) op = 3 - op;if(op == 1 && X == left[Y]) continue;if(op == 2 && X == right[Y]) continue;int LX = left[X], RX = right[X], LY = left[Y], RY = right[Y];if(op == 1) {link(LX, RX); link(LY, X); link(X, Y);}else if(op == 2) {link(LX, RX); link(Y, X); link(X, RY);}else if(op == 3) {if(right[X] == Y) { link(LX, Y); link(Y, X); link(X, RY); }else { link(LX, Y); link(Y, RX); link(LY, X); link(X, RY); }}}}int b = 0;long long ans = 0;for(int i = 1; i <= n; i++) {b = right[b];if(i % 2 == 1) ans += b;}if(inv && n % 2 == 0) ans = (long long)n*(n+1)/2 - ans;printf("Case %d: %lld\n", ++kase, ans);}return 0;
}

移动盒子uva12657相关推荐

  1. uva12657 移动盒子

    你有一行盒子,从左到右依次编号为1,2,3,-,n.可以执行以下4种指令: 1 x y:表示把盒子x移动到盒子y的左边(如果x已经在y的左边则忽略此指令). 2 x y:表示把盒子x移动到盒子y的右边 ...

  2. UVA12657 移动盒子 Boxes in a Line

    首先一看题,应该发现需要使用链表,并且有翻转操作,确定是双向,链表,对于操作1和2,我们直接删除x,然后把它插在相应的位置,不需要去判断,但是这里需要注意,翻转会影响左右,也就是一开始右边是next, ...

  3. 移动盒子——双向链表

    移动盒子UVa 12657 你有一行盒子,从左到右依次编号为1,2,3,-,n.可以执行以下4种指令: 1 x y:表示把盒子x移动到盒子y的左边(如果x已经在y的左边则忽略此指令). 2 x y:表 ...

  4. HarmonyOS UI开发 AdaptiveBoxLayout(自适应盒子布局) 的使用

    AdaptiveBoxLayout 是什么 AdaptiveBoxLayout 是自适应盒子布局,该布局提供了在不同屏幕尺寸设备上的自适应布局能力,主要用于相同级别的多个组件需要在不同屏幕尺寸设备上自 ...

  5. 创建一个水平盒子java_盒子模型理解

    HTML CSS + DIV实现整体布局 1.技术目标: 开发符合W3C标准的Web页面 理解盒子模型 实现DIV+CSS整体布局 2.什么是W3C标准? W3C:World Wide Web Con ...

  6. 【Qt】Qt样式表总结(四):CSS盒子模型

    官网:http://doc.qt.io/qt-5/stylesheet-customizing.html#box-model [Qt]Qt样式表总结(一):选择器 [Qt]Qt样式表总结(二):冲突和 ...

  7. css盒子教程,彻底弄懂css盒子模式(div布局快速入门)_css教程

    实现结构与表现分离 在真正开始布局实践之前,再来认识一件事--结构和表现相分离,这也用CSS布局的特色所在,结构与表现分离后,代码才简洁,更新才方便,这不正是我们学习CSS的目的所在吗?举个例来说P是 ...

  8. CSS之布局(盒子的尺寸)

    盒子的尺寸: <!DOCTYPE html> <html><head><meta charset="UTF-8"><title ...

  9. CSS之布局(盒子的垂直布局)

    盒子的垂直布局: <!DOCTYPE html> <html><head><meta charset="UTF-8"><tit ...

最新文章

  1. 分享10个实用的高效办公神器,极大地提高办公效率
  2. 干货丨贝叶斯机器学习前沿进展
  3. Tomcat源码解读系列(二)——Tomcat的核心组成和启动过程
  4. 深入理解事件循环机制
  5. JDK 8 新特性 之 Lambda表达式
  6. quick time不可用是什么意思_fpga是什么意思(fpga怎么用)
  7. 每日一题(27)—— define定义一个宏表明1年中有多少秒
  8. 学习笔记之数据可视化(二)—— 页面布局(下)
  9. virtual lab motion对连杆载荷进行扫速瀑布图及阶次切片分析
  10. Java基础——0 前言
  11. LeetCode 121买卖股票的时机
  12. 小型机oracle命令,IBM 小型机基本知识及AIX操作系统基本命令.doc
  13. 大学四年怎样过,做到这六点,甩别人一条街
  14. 架构运维篇(四):Centos7/Linux中Tomcat安装SSL证书实践
  15. mysql linux 安装包下载_mysql官网下载linux版本安装包
  16. 百练_1664:放苹果_递归
  17. 手机更换证件照背景色只需1分钟,别去打印店花冤枉钱了
  18. [渝粤教育] 西南科技大学 法律文书写作 在线考试复习资料(1)
  19. CSS 关键字 initial、inherit 和 unset
  20. android edittext限制字节_EditText输入字数限制的三个方法

热门文章

  1. PRET-C:一种用于精确定时架构的编程新语言
  2. mac电脑上pdf怎么转换成excel表格?
  3. 如何用Origin制作矩阵工作表
  4. Invensys Simsci-Esscor.DYNSIM.V5.32动态模拟软件
  5. java抽奖_简单实现java抽奖系统
  6. 万帮数字能源/星星充电发生工商变更,刘明刚、单俊葆退出董事会
  7. predict.py: error: unrecognized arguments: model_name=BMN config=./configs/bmn.yaml log_interval=1 w
  8. Marco's Java【SpringBoot入门(六) 之 Thymeleaf模板引擎的使用】
  9. 日期格式化之moment()和moment().format()的区别
  10. Win10设置睡眠、休眠、关闭硬盘,适合程序长时间执行