Boxes in a Line UVA - 12657 (双向链表)
题目链接: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 (双向链表)的更多相关文章
- 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 ...
- Uva 12657 双向链表
题目链接:https://uva.onlinejudge.org/external/126/12657.pdf 题意: 给你一个从1~n的数,然后给你操作方案 • 1 X Y : move box X ...
- uva 12657(双向链表)
一定要注意swap(x, y),x, y可能相邻! #include <cstdio> #define N 100005 #define ll long long int n, m; st ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- Problem B Boxes in a Line
省赛B题....手写链表..其实很简单的.... 比赛时太急了,各种手残....没搞出来....要不然就有金了...注:对相邻的元素需要特判..... Problem B Boxes in a Li ...
- CDQ分治入门 + 例题 Arnooks's Defensive Line [Uva live 5871]
CDQ分治入门 简介 CDQ分治是一种特别的分治方法,它由CDQ(陈丹琦)神犇于09国家集训队作业中首次提出,因此得名.CDQ分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某 ...
随机推荐
- netty中的PlatformDependent
通过类名就知道这是一个平台有关的类,通过对该类的学习可以帮助我们实现一个跨平台的应用.但是有些方法放的实现不是很好,比如:isWindows0.通过File的separator就可以判断出来.没必要那 ...
- WordCount测试小程序的实现
一.GitHub地址: https://github.com/245553473/WordCount 二.PSP表格: PSP PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ...
- C#中 ACCESS数据库常用操作语句...容易出错的地方(DateTime类型)
这次在C#编程过程中,第一次用到了ACCESS数据库,重点涉及到时间类型,整数类型.是否类型....;遇到了许多困难,就把这些整理了下来,与大家分享. 一.Insert语句的基本格式: INSERT ...
- [译]Javascript中的错误信息处理(Error handling)
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- C#非泛型集合和泛型集合
第一 : ArrayList(非泛型集合) 与List(泛型集合) ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array(数 ...
- C#数据类型及差异(复习专用)
一.数据类型 值类型 类型 描述 范围 默认值 bool 布尔值 True 或 False False byte 8 位无符号整数 0 到 255 0 char 16 位 Unicode 字符 U + ...
- wampserver2.5 在 Win7 64位下的相关配置备忘
发现运行和配置这个版本和之前的Wampserver有些差异,特此记录 1).wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b,另外有可能需要安 ...
- eclise远程调试
配置很简单,如下: 1. tomcat在bin/catalina.sh中添加如下:declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -D ...
- 消息队列开发记录笔记-ActiveMQ
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
- Django之高级视图与URL
Urls.py中有我们所有的路由映射关系.但是随着网站功能的增多,需要配置的URL也变得多了起来.并且维护这些导入也变得很麻烦.因此介绍一些优化和简洁的方法: 一 使用多个视图前缀: 之前所有的路由关 ...