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分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某 ...
随机推荐
- UVa 1204 Fun Game (状压DP)
题意:有一些小孩(至少两个)围成一圈,有 n 轮游戏,每一轮从某个小孩开始往左或者往右伟手帕,拿到手帕写上自己的性别(B,G),然后以后相同方向给下一个. 然后在某个小孩结束,给出 n 轮手帕上的序列 ...
- 手把手教Android商业项目-即时通讯-i美聊
[课程概况] 手把手教你从无到有的完整实现一个Android商业项目,是目前整个市场上所没有的课程,废话不多说,请往下看. [项目概况] 项目名称:i美聊 所属领域:移动社交 即时通讯 代码行数: ...
- 【Arcgis for android】Error inflating class com.esri.android.map.MapView【已解决】
解决方案:如果你是一个项目之前调试是好的,突然调试报这个错,听我的,直接卸载手机上调试的这个程序,重新调试,你会发现ok了 环境:arcgis android 10.2 错误:E/AndroidRun ...
- MVC要点
1.绑定一个DropDownList @Html.DropDownListFor(m => m.MobileType, new List<SelectListItem>() { ne ...
- oracle 逻辑体系结构详解
以前对数据库的了解大多数是集中在mysql,最近工作里面一直使用的是oracle,虽然说在互联网行业mysql大行其道,但是一些传统行业或者是金融领域还是更加倾向于使用oracle,sqlserver ...
- eval实例
.... var sel_MedicineType = 'sel_MedicineType' + lastIndex; eval(sel_MedicineType + "= new C_Se ...
- Hadoop单机/伪分布式集群搭建(新手向)
此文已由作者朱笑笑授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文主要参照官网的安装步骤实现了Hadoop伪分布式集群的搭建,希望能够为初识Hadoop的小伙伴带来借鉴意 ...
- Django会话,用户和注册之用户认证
通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证. 当然了,Django 也提供 ...
- iOS开发--OC常见报错
1.解决RegexKitLite导入报错问题 2.The working copy "Test" failed to commit files.问题解决
- 【Python】python对象与json相互转换
转自:http://blog.csdn.net/leilba/article/details/50654256 # -*- coding: UTF-8 -*- import json #自定义类 cl ...