题目链接:https://vjudge.net/problem/UVA-12657

题目大意:输入n,m  代表有n个盒子 每个盒子最开始按1~n排成一行  m个操作,

1 x y  :把盒子x放到y的左边

2 x y: 把盒子x放到y 的右边

3 x y:调换x y盒子的位置

4    表示反转整条链

思路:也是很明显的暴力 模拟 。  但是值得提的是 虽然是暴力,但是却是用的双向链表来暴力。

有很多要注意的地方 :

当操作4的时候,我们可以把本次操作记录一下,不必直接把全部的位置反转 试想一下,如果每次出现一个4  每次都反转  那多麻烦 (我们要反转的话,首先得找到最后一个盒子,然后从最后一个盒子往前重新存储一遍)

但是如果有记录操作4注意再碰到其他操作 也要随之改变  :

当有记录4的时候  操作1就相当于操作2     操作2相当于操作1

还有注意的是  操作3  两个盒子交换位置   :  两个盒子相邻和不相邻是不一样的  切记!!!

最后   要输出结果的话 :  注意有没有操作4  如果有操作4的话  如果是奇数 反转一次对结果没有影响   但是偶数 的话    反转一次 我们现在求的刚好的偶数位的   总的减掉就是答案了

具体看代码:

#include<iostream>
#include<string.h>
#include<vector>
#include<stdio.h>
using namespace std;
const int maxn=1e5+5;
int n;
int Left[maxn];
int Right[maxn];
void link(int l,int r) //两个节点相连
{Right[l]=r;Left[r]=l;
}
int main()
{int m,ca=0;while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=n;i++)//存好节点
        {Left[i]=i-1;Right[i]=(i+1)%(n+1);//这里为何%(n+1)   试想一下 最后一个元素的右端是谁   显然是第一个元素0
        }Left[0]=n;Right[0]=1;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;//当调整一次顺序的时候 操作1和2  刚好相反 可以自己举例子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(x,ry);link(y,x);}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];//其实b就是i位置对应的值  可以仔细想一下if(i%2==1) ans+=b;}if(inv&&n%2==0) ans=(long long)n*(n+1)/2-ans;//自己举个例子就可以明白 n为奇数没有影响printf("Case %d: %lld\n",++ca,ans);}return 0;
}

转载于:https://www.cnblogs.com/caijiaming/p/10345830.html

Boxes in a Line UVA - 12657 (双向链表)相关推荐

  1. 例题6-5 移动盒子(Boxes in a Line, UVa 12657)

    例题6-5 移动盒子(Boxes in a Line, UVa 12657) 双向链表(数组模拟) #include<iostream> #include<algorithm> ...

  2. 33行代码AC——例题6-5 移动盒子(Boxes in a Line, UVa 12657)——解题报告

    题目大意 对升序排列的n个数字(1开始编号)进行一系列操作,输出最终序列的奇位数之和.操作如下: 1 X Y:把X移到Y左侧 2 X Y:把X移到Y右侧 3 X Y:交换X和Y 4:反转序列(逆置) ...

  3. UVa 12657 双向链表

    UVa 12657 双向链表 转载于:https://www.cnblogs.com/daijkstra/p/4475452.html

  4. 【UVA 12657】移动盒子 Boxes in a Line

    [UVA 12657]移动盒子 Boxes in a Line 洛谷题目地址 [题意] 一行有n 个盒子,从左到右编号为1-n.模拟以下4种命令. 1 X Y :将盒子X 移动到Y 的左侧(如果X 已 ...

  5. UVA12657 Boxes in a Line【模拟】

    You have n boxes in a line on the table numbered 1 . . . n from left to right. Your task is to simul ...

  6. CDQ分治入门 + 例题 Arnooks's Defensive Line [Uva live 5871]

    CDQ分治入门 简介 CDQ分治是一种特别的分治方法,它由CDQ(陈丹琦)神犇于09国家集训队作业中首次提出,因此得名.CDQ分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某 ...

  7. UVa 12657 - Boxes in a Line ( 双向链表 )

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

  8. Uva 12657 Boxes in a Line 双向链表

    操作4比较特殊,为了避免一次性修改所有元素的指针,由于题目只要求输出奇数盒子的编号,所以我们可以灵活的根据是否进行过操作4对操作1 操作2 进行改动 操作3不受操作4影响 上代码.... #inclu ...

  9. UVA 12657 Boxes in a Line

    题目链接:https://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&page=show_proble ...

最新文章

  1. python 自动填充表单,如何在Django / Python中自动填充PDF表单?
  2. python maketrans方法
  3. FMDB使用的数据库的三种形式
  4. 基于邮件系统的远程实时监控系统的实现 Python版
  5. 在阿里云上试用 Knative
  6. linux 添加重定向域名,Linux系统中Nginx的安装并进行域名认证和重定向
  7. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
  8. Unplugged In Newyork
  9. Spinnaker:云原生多云环境持续部署的未来
  10. 使用Google的项目(源码)托管服务(转)
  11. 027_《Delphi Direct X 图形与游戏程序设计》
  12. 2021年中国图书出版行业经营现状及重点企业对比分析:凤凰传媒优势明显[图]
  13. 基于JavaWeb的背单词系统的设计与实现
  14. 1393: 国防部长PIPI
  15. Excel 2011 显示被隐藏的第一行
  16. 换个角度看前几天的女孩父亲杀男孩事件 另附一些对当前教育的感想
  17. Qt读取Json文件数据
  18. 拼多多商家刚开店是如何破零的?
  19. 磁盘分区怎么恢复回去
  20. sublime text 3 调色板插件

热门文章

  1. Visual Studio控制台程序输出窗口一闪而过的解决方法
  2. VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
  3. scrollview嵌套listview 滑动事件冲突的解决方法
  4. arcgis desktop 10.1 license manager无法启动问题解决
  5. 解决 Oracle TNSListener 服务启动找不到路径问题
  6. Handshake failed due to invalid Upgrade header: null 解决方案
  7. 【报告分享】2022年元宇宙全球年度(202页干货):蓄积的力量-北京大学.pdf(附下载链接)...
  8. 推荐系统系列教程之十一:那些在Netflix Prize中大放异彩的推荐算法
  9. Leetcode每日一题:861.score-after-flipping-matrix(反转矩阵后的得分)
  10. 《Deep Learning》笔记