Uva 12657 双向链表
题目链接:https://uva.onlinejudge.org/external/126/12657.pdf
题意:
给你一个从1~n的数,然后给你操作方案
• 1 X Y : move box X to the left to Y (ignore this if X is already the left of Y )
• 2 X Y : move box X to the right to Y (ignore this if X is already the right of Y )
• 3 X Y : swap box X and Y
• 4: reverse the whole line.
WA的地方:
1、指针的赋值顺序,还是先保存一下。
2、交换的时候,如果相邻,要特判,否则指针会乱。
3、反转的时候,我这里是实际上没有反转的,因此,操作 1,2,就会由于是否反转而混乱。
#include <bits/stdc++.h> using namespace std; const int maxn = ;
int lefts[maxn];
int rights[maxn]; void link(int x,int y)
{
rights[x] = y;
lefts[y] = x;
} int main()
{
int n,m;
int kase = ;
while(~scanf("%d%d",&n,&m))
{
for(int i=; i<=n; i++)
{
lefts[i] = i-;
rights[i] = (i+)%(n+);
}
lefts[] = n;
rights[] = ;
int re = ;
while(m--)
{
int op;
scanf("%d",&op);
if(op==)
{
re = !re;
continue;
}
int x,y;
scanf("%d%d",&x,&y); if(op==&&rights[y]==x) swap(x,y);
if(op!=&&re) op = - op;
if(op==&&lefts[y]==x) continue;
if(op==&&rights[y]==x) continue; int lx = lefts[x],rx = rights[x],ly =lefts[y],ry = rights[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(rights[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 = rights[b];
if(i%==)
ans +=(long long)b;
}
if(re)
{
ans = (long long)n*(long long)(n+)/ - ans;
}
printf("Case %d: %lld\n",kase++,ans);
}
return ;
}
Uva 12657 双向链表的更多相关文章
- 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 双向链表
题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47066 利用链表换位置时间复杂度为1的优越性,同时也考虑到使用实际 ...
- 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 ...
- Boxes in a Line UVA - 12657 (双向链表)
题目链接:https://vjudge.net/problem/UVA-12657 题目大意:输入n,m 代表有n个盒子 每个盒子最开始按1~n排成一行 m个操作, 1 x y :把盒子x放到y ...
- Uva 12657 移动盒子(双向链表)
题意: 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.可以执行以下4种指令:1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y右 ...
- UVA 12657 Boxes in a Line
双向链表 注意:如果算法是最后处理翻转情况时,注意指令4翻转后1,2两个指令也要翻转处理: 指令3 中交换盒子要注意两个盒子相邻的情况 #include <iostream> #inclu ...
- 【例题 6-5 UVA 12657 】Boxes in a Line
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 双向链表模拟题. 移动的时候,要注意它就在所需要的位置的情况.那种情况不移动. (如果已经在所需位置了,还用链表的插入方式强行移动的 ...
- 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(数组模拟双链表)
题目链接 /* 问题 将一排盒子经过一系列的操作后,计算并输出奇数位置上的盒子标号之和 解题思路 由于数据范围很大,直接数组模拟会超时,所以采用数组模拟的链表,left[i]和right[i]分别表示 ...
随机推荐
- springBoot学习资料
转载:http://www.importnew.com/29363.html 官网搭建springBoot项目:https://www.cnblogs.com/lcplcpjava/p/7406253 ...
- my.助战选择
ZC:我的选项:铁扇.小白龙.北海龙女.北海龙子(涌浪).老鼠精(避敌锋芒).惠岸.银角 ZC:我的选择(日常速推不是我急需的,慢一点无所谓,我需要过难度):老鼠精(避敌锋芒).银角(首回合隐身,每回 ...
- python17 多线程学习
多线程 多任务可以由多进程完成,也可以由一个进程内的多线程完成. 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程. 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的 ...
- js校验密码,不能为空的8-20位非纯数字或字母的密码
jsp: <div class="mui-input-row"> <label>密码</label><!-- id='password' ...
- linux进程间的通信之 共享内存
一.共享内存介绍 共享内存是三个IPC(Inter-Process Communication)机制中的一个. 它允许两个不相关的进程访问同一个逻辑内存. 共享内存是在两个正在进行的进程之间传递数据的 ...
- RTT之AT命令组件
包含客户端和服务器:用于GPRS和3G的通讯命令格式.四种基本功能 测试功能:AT+<x>=? 用于查询命令参数格式及取值范围: 查询功能:AT+<x>? 用于返回命令参数当前 ...
- 通过navigator.userAgent判断浏览器类型
1.navigator.userAgent返回一个浏览器信息字符串. 2.用到indexOf()方法,查找字符串中是否有指定的浏览器类型. 3. if(navigator.userAgent.inde ...
- Barty's Computer 字典树
https://nanti.jisuanke.com/t/17122 Barty have a computer, it can do these two things. Add a new stri ...
- day06 - Python - 面向对象
本节内容: 引子 面向对象 v.s. 面向过程 面向对象编程介绍 面向对象的特性: 封装 继承 多态 类.方法 1.引子 假设你现在是一家游戏公司的开发人员,现 ...
- PHP substr()函数
PHP substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法 ...