题目链接

 /*
问题
将一排盒子经过一系列的操作后,计算并输出奇数位置上的盒子标号之和 解题思路
由于数据范围很大,直接数组模拟会超时,所以采用数组模拟的链表,left[i]和right[i]分别表示i号盒子的左边是谁和右边
是谁。特别提醒,4这个操作可以采用其他的办法去标记,而不必真的去模拟交换,否则会超时。
*/ #include<cstdio>
#include<algorithm> using namespace std;
const int maxn=;
int n,left[maxn],right[maxn]; void link(int r,int l); int main()
{
//freopen("E:\\testin.txt","r",stdin);
int m,i,kase=;
while(scanf("%d%d",&n,&m) != EOF){
for(i=;i<=n;i++){
link(i,i+);
}
left[]=n;
right[n]=; int op,x,y;
int 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;
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(y,x);
link(x,ry);
}else if(op == ){
if(right[x] == y){
link(y,x);
link(lx,y);
link(x,ry);
}
else{
link(lx,y);
link(y,rx);
link(ly,x);
link(x,ry);
}
}
}
} int cou=;
long long ans=;
for(int i=;i<=n;i++){
cou=right[cou];
//printf("#%d\n",cou);
if(i% == )
ans += cou;
}
if(inv && n% == ) ans = (long long)n*(n+)/ - ans;
printf("Case %d: %lld\n",kase++,ans);
}
return ;
} void link(int l,int r)
{
right[l]=r;
left[r]=l;
}

UVa 12657 Boxes in a Line(数组模拟双链表)的更多相关文章

  1. Problem UVA12657-Boxes in a Line(数组模拟双链表)

    Problem UVA12657-Boxes in a Line Accept: 725  Submit: 9255 Time Limit: 1000 mSec Problem Description ...

  2. 数组模拟双链表,你get到了吗?

    数组模拟双链表 通过前面的学习我们知道单链表是单个指针指向操作,那么通过类比我们可以把指针设定为两个,并且让它们分别指向前后数据,这就是"双向链表".使用这种链表,不仅可以从前往后 ...

  3. C - 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 ...

  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 双向链表

    题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47066 利用链表换位置时间复杂度为1的优越性,同时也考虑到使用实际 ...

  6. UVa12657 - Boxes in a Line(数组模拟链表)

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

  7. UVA 12657 Boxes in a Line

    双向链表 注意:如果算法是最后处理翻转情况时,注意指令4翻转后1,2两个指令也要翻转处理: 指令3 中交换盒子要注意两个盒子相邻的情况 #include <iostream> #inclu ...

  8. UVA 12657 Boxes in a Line(双向链表+小技巧)

    题意:对于一行按照顺序排列盒子数字与位置都为 1,2,3,4....n 执行四种操作 c = 1    x 放到 y 的左边 c =2     x 放到 y 的右边 c =3 交换 x, y c =4 ...

  9. 【数组模拟的链表or复杂模拟】PAT-L2-002. 链表去重

    L2-002. 链表去重 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须 ...

随机推荐

  1. 用Html创建简历

    用最基本的html实现简历的创建 代码 <!doctype html> <html> <head><meta charset="utf-8" ...

  2. day07_雷神_面向对象进阶

    day07 1.接口类(抽象类) 接口类和抽象类是一种规范,写代码时的规范. 两个思想: 一个是统一接口,一个是定义规则. 最终版本:接口类,抽象类,是一种规范,写代码时的规范 强制性的规定. fro ...

  3. 工作随笔——elasticsearch 6.6.1安装(docker-compose方式)

    docker-compose.yml: version: '2.2' services: es1: image: docker.elastic.co/elasticsearch/elasticsear ...

  4. AngularJs自定义过滤器filter

    AngularJs自带有很多过滤器,现在Insus.NET演示一个自定义的过滤器,如实现一个数据的平方. 本演示是在ASP.NET MVC环境中进行. 创建一个app: 创建一个控制器: 接下来是重点 ...

  5. Mac系统安装和卸载brew包管理

    brew 的官网地址  https://brew.sh/ 1.brew的安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercon ...

  6. D3.js的基础部分之选择集的处理 enter和exit的处理方法 (v3版本)

    上一节给大家讲述额绑定数据的原理.当数组的长度与元素的数量不一致时,有enter部分和exit部分,前者表示存在多余的数据,后者表示存在多余的元素.本节将给大家介绍如何处理这些多余的东西,最后会给大家 ...

  7. Windows Phone开发手记-WinRT下分组拼音的实现

    Windows Phone版本号自升入8.1以来,开发者就多了一个选项,开发基于WinRT架构的WP或者Universal Windows App.然而开发框架转为WinRT后,很多原有的WP8基于S ...

  8. 腾讯开源极限渲染js模板链接

    https://aui.github.io/art-template/zh-cn/index.html

  9. python--使用pickle序列化对象

    pickle序列化对象 如果希望透明地存储 Python 对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将任意复杂的对象转成对象的文本或二进制表示的过程. 同样,必须能够将对象 ...

  10. TypeScript设计模式之装饰、代理

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...