Uva12657 Boxes in a Line
题目链接:传送门

分析:每次操作都会花费大量时间,显然我们只需要关注每个元素的左边是啥,右边是啥就够了,那么用双向链表,l[i]表示i左边的数,r[i]表示i右边的数,每次操作模拟一下数组的变化就好了.
不过这样有一个问题:第4个操作似乎无法很高效地进行,如果真的按照它说的那样模拟翻转,恐怕复杂度和暴力也要差不多了,那么我们怎么处理呢?
观察发现题目只让我们输出奇数位置的编号和,也就是说,如果题目给定的序列长度就是奇数的,那么无论用多少次4操作都没有影响,否则4的次数是奇数,则用总和减去当前奇数位置的和就是答案。这就相当于线段树中的lazy标记的做法,现在要考虑这个标记对其它操作的影响,显然对3操作是没有任何影响的,而对1,2操作无非就是把1变成了2,把2变成了1,这样就很快地就能解决问题了。
如果数据结构上的某一个操作很耗时,有时可以用加标记的方式处理,而不需要真的执行那个操作。但同时,该数据结构的所有其他操作都要考虑这个标记!
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue> using namespace std; const int maxn = ; int n, m, kase, l[maxn], r[maxn],flag;
long long ans; int main()
{
while (scanf("%d%d", &n, &m) == )
{
for (int i = ; i <= n; i++)
{
l[i] = i - ;
r[i] = (i + ) % (n + );
}
l[] = n;
r[] = ;
flag = ;
for (int i = ; i <= m; i++)
{
int op,x,y;
scanf("%d", &op);
if (op == )
flag = (flag + ) % ;
else
{
scanf("%d%d", &x, &y);
if (op != && flag)
op = - op;
if (op == && l[y] == x)
continue;
if (op == && r[y] == x)
continue; if (op == )
{
l[r[x]] = l[x];
r[l[x]] = r[x];
r[l[y]] = x;
r[x] = y;
l[x] = l[y];
l[y] = x;
}
else
if (op == )
{
l[r[x]] = l[x];
r[l[x]] = r[x];
l[x] = y;
r[x] = r[y];
l[r[y]] = x;
r[y] = x;
}
else
if (op == )
{
if (r[x] == y)
{
r[l[x]] = y;
l[y] = l[x];
r[y] = x;
l[x] = y;
r[x] = r[y];
l[r[y]] = x;
}
else
{
r[l[y]] = x;
l[r[y]] = x;
r[l[x]] = y;
l[r[x]] = y;
swap(l[x], l[y]);
swap(r[x], r[y]);
}
}
}
int cur = ;
ans = ;
for (int i = ; i <= n; i++)
{
cur = r[cur];
if (i % == )
ans += cur;
}
if (flag && n % == )
ans = (long long)n * (n + ) / - ans;
}
printf("Case %d: %lld\n", ++kase, ans);
} return ;
}
Uva12657 Boxes in a Line的更多相关文章
- 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 ...
- UVA12657 Boxes in a Line:题解
题目链接:https://www.luogu.org/problemnew/show/UVA12657 分析: 此题使用手写链表+模拟即可.(其实可以用list,而且更简便,但是会大大的超时) 肯定是 ...
- UVa12657 - Boxes in a Line(数组模拟链表)
题目大意 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.你可以执行四种指令: 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y ...
- UVA-12657 Boxes in a Line (双向链表)
题目大意:一个1~n的升序数字序列,有4种操作.操作1,将x放到y前面一个位置:操作2将x放到y后面的一个位置:操作3交换x和y的位置:操作4反转整个序列.求经过m次操作后的所有奇数项的和. 题目分析 ...
- Problem B Boxes in a Line
省赛B题....手写链表..其实很简单的.... 比赛时太急了,各种手残....没搞出来....要不然就有金了...注:对相邻的元素需要特判..... Problem B Boxes in a Li ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- ionic安卓打包apk--安卓签名
上周项目上线,在网上看了看打包的博客,感觉不是很清晰我自己来总结下 首先,我们在项目的根目录下 build android apk 的时候执行的命令一定要是 ionic build android - ...
- webapp填坑记录
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- [C++ STL] deque使用详解
一.deque介绍: deque(双端队列)是一个动态数组,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速. 在中间部分安插元素则比较费时,因为必须移动其它元素. 二.用法 1.头文件 #in ...
- [BZOJ5109/CodePlus2017]大吉大利,晚上吃鸡!
Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏中,皮皮和毛毛最喜欢做的事情就是堵桥,每每有一个好时机都能收到不少的快递 ...
- 有关lower_bound()函数的使用
lower_bound()函数需要加载头文件#include<algorithm>,其基本用途是查找有序区间中第一个大于或等于某给定值的元素的位置,其中排序规则可以通过二元关系来表示. 函 ...
- ACM_四数之和
四数之和 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个不同的整数,判断能否从中选4次,4个数和刚好为m.数字可重复选取. ...
- kafka的server.properties配置文件参考示范(图文详解)(多种方式)
简单点的,就是 kafka_2.11-0.8.2.2.tgz的3节点集群的下载.安装和配置(图文详解) 但是呢,大家在实际工作中,会一定要去牵扯到调参数和调优问题的.以下,是我给大家分享的kafka的 ...
- [ NOI 2002 ] 银河英雄传说
\(\\\) Description 有 \(n\) 列战场,每一列一开始只有一个战舰,编号就是对应的战场编号. 有 \(m\) 次操作: \(M_{i,j}\) :把 \(i\) 所在的一整列接在 ...
- 扩展Snackbar 使其支持居中显示
https://github.com/nispok/snackbar 默认Snackbar支持底部或者顶部显示,不支持居中显示 查看Snackbar.java的源码可以看到createMarginLa ...
- Django基础之创建程序
环境配置 安装python35 安装django:pip install django==1.9.5 创建django程序 1.命令行创建django程序 A django-admin startpr ...