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分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某 ...
随机推荐
- SDUT 2498 AOE网上的关键路径
AOE网上的关键路径 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 一个无环的有向图称为无 ...
- HTML相关知识和经验的碎片化记录
1.标签input在type="file"时,name是必须属性 <form id="MainFileUpload" name="MainFil ...
- JavaScript prototype原型链介绍
javascript 是一种基于原型的编程 (prototype based programming) 的语言, 而与我们通常的基于类编程 (class based programming) 有很大的 ...
- 前端文件加载 net::ERR_CONTENT_LENGTH_MISMATCH
前端文章加载的时候有的时候图片不显示,有的时候文件加载不了,检查nginx设置都没有问题,最近才不显示,经检查是nginx服务器磁盘空间已满,将.log文件移动到其他位置 cp /dev/null ...
- android报错:org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject
今天在写一个webservice时一直报错,报Caused by: java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast ...
- CLH同步队列
原文链接:https://blog.csdn.net/chenssy/article/details/60781148 AQS内部维护着一个FIFO队列,该队列就是CLH同步队列. CLH同步队列是一 ...
- 剑指offer —— 替换空格
1.问题:请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.思路:可能首先想到的应该就是 ...
- charset=iso-8859-1
今天群里有人在问, 求解:charset="ISO-8859-1"是什么意思 其实我也不大懂,然后就去翻阅了下资料.科普开始: 网页制作中遇到的编码,乱码问题之一:charset= ...
- springcloud系列九 整合Hystrix Dashboard
Hystrix Dashboard是Hystrix的仪表盘组件,主要用来实时监控Hystrix的各项指标信息,通过界面反馈的信息可以快速发现系统中存在的问题. 整合快速体验: pom.xml(这个是F ...
- spring 事务 配置 多个
Spring中事务控制相关配置: <bean id="txManager" class="org.springframework.jdbc.datasource.D ...