题目链接: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+;
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=;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<=n;i++)//存好节点
{
Left[i]=i-;
Right[i]=(i+)%(n+);//这里为何%(n+1) 试想一下 最后一个元素的右端是谁 显然是第一个元素0
}
Left[]=n;
Right[]=;
int op,x,y,inv=;
while(m--)
{
scanf("%d",&op);
if(op==) inv=!inv;//相当于一种延迟标记
else
{
scanf("%d%d",&x,&y);
if(op==&&Right[y]==x) swap(x,y);//
if(op!=&&inv) op=-op;//当调整一次顺序的时候 操作1和2 刚好相反 可以自己举例子
if(op==&&x==Left[y]) continue;//已经满足条件了
if(op==&&x==Right[y]) continue;
int lx=Left[x],rx=Right[x],ly=Left[y],ry=Right[y];
if(op==) //调整位置
{
link(lx,rx);
link(ly,x);
link(x,y);
}
else if(op==)
{
link(lx,rx);
link(x,ry);
link(y,x);
}
else if(op==)//注意两者相连和不相连交换位置操作是不一样的 !!!
{
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=;
long long ans=;
for(int i=;i<=n;i++)
{
b=Right[b];//其实b就是i位置对应的值 可以仔细想一下
if(i%==) ans+=b;
}
if(inv&&n%==) ans=(long long)n*(n+)/-ans;//自己举个例子就可以明白 n为奇数没有影响
printf("Case %d: %lld\n",++ca,ans);
}
return ;
}

Boxes in a Line UVA - 12657 (双向链表)的更多相关文章

  1. Boxes in a Line UVA - 12657

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

  2. Uva 12657 双向链表

    题目链接:https://uva.onlinejudge.org/external/126/12657.pdf 题意: 给你一个从1~n的数,然后给你操作方案 • 1 X Y : move box X ...

  3. uva 12657(双向链表)

    一定要注意swap(x, y),x, y可能相邻! #include <cstdio> #define N 100005 #define ll long long int n, m; st ...

  4. UVa 12657 Boxes in a Line(应用双链表)

    Boxes in a Line You have n boxes in a line on the table numbered 1 . . . n from left to right. Your ...

  5. uva-12657 - Boxes in a Line(双向链表)

    12657 - Boxes in a Line You have n boxes in a line on the table numbered 1 . . . n from left to righ ...

  6. Boxes in a Line

    Boxes in a Line You have n boxes in a line on the table numbered 1 . . . n from left to right. Your ...

  7. 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 sim ...

  8. Problem B Boxes in a Line

     省赛B题....手写链表..其实很简单的.... 比赛时太急了,各种手残....没搞出来....要不然就有金了...注:对相邻的元素需要特判..... Problem B Boxes in a Li ...

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

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

随机推荐

  1. WebGoat系列实验AJAX Security

    WebGoat系列实验AJAX Security DOM Injiction 实验对象是一个接受激活密钥后允许你访问的系统,实验目标是尝试将激活按钮变得可以点击. 直接修改页面代码激活按钮,Chrom ...

  2. Android 中 吐司显示不出来的原因分析

    当你发现你的toast的show方法的确被执行了,但是却没有在界面中显示出来, 有问题的地方可能有两点: 1.Context上下文对象有问题,不是当前的上下文对象或者什么的: 2.message(即T ...

  3. springMvc参数传递的方法

    package cn.edu.hj.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; im ...

  4. CodeForces - 710C Magic Odd Square(奇数和幻方构造)

    Magic Odd Square Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, c ...

  5. 【Arcgis android】 离线编辑实现及一些代码段

    Arcgis android 离线编辑实现及一些代码段 底图添加 private String path="file:///mnt/sdcard/data/chinasimple.tpk&q ...

  6. 关于Android Studio中第三方jar包的Javadoc绑定

    原文地址:http://blog.csdn.net/a739697044/article/details/28116189   现在刚开始从Eclipse转用Android Studio,现在在尝试使 ...

  7. ASP.NET-GridView分页排序显示

    前期我们分别介绍了gridview怎么进行固定表多行数据显示,以及怎么设计花样表头.下面我们介绍怎么利用gridview进行分页显示的同时还可以进行排序显示. 显示效果 前端DEMO <span ...

  8. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre

    原文链接:https://blog.csdn.net/hq091117/article/details/79065199 https://blog.csdn.net/allen_tsang/artic ...

  9. P4172 [WC2006]水管局长 LCT维护最小生成树

    \(\color{#0066ff}{ 题目描述 }\) SC 省 MY 市有着庞大的地下水管网络,嘟嘟是 MY 市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的 ...

  10. PHP删除目录下的空目录

    function rm_empty_dir($path){       if(is_dir($path) && ($handle = opendir($path))!==false){ ...