UVA-12657 Boxes in a Line (双向链表)
题目大意:一个1~n的升序数字序列,有4种操作。操作1,将x放到y前面一个位置;操作2将x放到y后面的一个位置;操作3交换x和y的位置;操作4反转整个序列。求经过m次操作后的所有奇数项的和。
题目分析:建立双向链表,每次操作只需修改链表中的元素指向。
代码如下:
# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std; int l[100005],r[100005]; void link(int a,int b)
{
r[a]=b,l[b]=a;
} int main()
{
int n,m,op,x,y,flag,cas=0;
while(scanf("%d%d",&n,&m)==2)
{
for(int i=1;i<=n;++i)
r[i]=(i+1)%(n+1),l[i]=i-1;
r[0]=1,l[0]=n; flag=0;
while(m--)
{
scanf("%d",&op);
if(op==4)
flag=!flag;
else{
scanf("%d%d",&x,&y);
if(op==3&&r[y]==x)///方便下面的操作;
swap(x,y);
if(op!=3&&flag)
op=3-op;
if(op==1&&l[y]==x)
continue;
if(op==2&&r[y]==x)
continue; int lx=l[x],rx=r[x],ly=l[y],ry=r[y];
if(op==1){
link(lx,rx);
link(ly,x);
link(x,y);
}else if(op==2){
link(lx,rx);
link(y,x);
link(x,ry);
}else{
if(r[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 k=0;
long long ans=0;
for(int i=1;i<=n;++i){
k=r[k];
if(i&1)
ans+=k;
}
if(flag&&n%2==0)
ans=(long long)n/2*(n+1)-ans;
printf("Case %d: %lld\n",++cas,ans);
}
return 0;
}
UVA-12657 Boxes in a Line (双向链表)的更多相关文章
- UVA 12657 Boxes in a Line 双向链表
题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47066 利用链表换位置时间复杂度为1的优越性,同时也考虑到使用实际 ...
- 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(双向链表+小技巧)
题意:对于一行按照顺序排列盒子数字与位置都为 1,2,3,4....n 执行四种操作 c = 1 x 放到 y 的左边 c =2 x 放到 y 的右边 c =3 交换 x, y c =4 ...
- UVA 12657 Boxes in a Line
双向链表 注意:如果算法是最后处理翻转情况时,注意指令4翻转后1,2两个指令也要翻转处理: 指令3 中交换盒子要注意两个盒子相邻的情况 #include <iostream> #inclu ...
- UVa 12657 Boxes in a Line(数组模拟双链表)
题目链接 /* 问题 将一排盒子经过一系列的操作后,计算并输出奇数位置上的盒子标号之和 解题思路 由于数据范围很大,直接数组模拟会超时,所以采用数组模拟的链表,left[i]和right[i]分别表示 ...
- 2019 SCUT SE 新生训练第四波 L - Boxes in a Line——双向链表
先上一波题目 https://vjudge.net/contest/338760#problem/L 这道题我们维护一个双向链表 操作1 2 3 都是双向链表的基本操作 4操作考虑到手动将链表反转时间 ...
- 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 UVA - 12657
You have n boxes in a line on the table numbered 1...n from left to right. Your task is to simulat ...
- 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 ...
随机推荐
- win10配置的静态/动态IP和 DNS的方法
1.配置静态IP和DNS netsh interface ip set address name="以太网" source=static addr=192.168.9.145 ma ...
- ArrayList遍历的三种方式 array arrayList转换
ArrayList遍历的三种方式 - 呵呵静 - 博客园 https://www.cnblogs.com/mjyung/p/6725182.html
- Worst Performing Queries
WITH TMP AS ( SELECT TOP 100 CAST(SUM(s.total_elapsed_time) / 1000000.0 AS DECIMAL(10, 2)) AS [Total ...
- AE读取CAD图层包括注记
public override void FillDatabase(Teigha.DatabaseServices.Database pDb) { IFeatureClassContainer pFe ...
- python之WebSocket协议
一.WebSocket理论部分 1.websocket是什么 Websocket是html5提出的一个协议规范,参考rfc6455. websocket约定了一个通信的规范,通过一个握手的机制,客户端 ...
- js动态移动滚动条至底部示例
使用js动态移动滚动条至底部. var currentPosition,timer; function GoBottom(){ timer=setInterval("runToBotto ...
- redis error MISCONF Redis is configured to save RDB snapshots
在操作命令incr时发生错误: (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able ...
- 【4】Python对象
本章主题 Python对象 内建类型 标准类型操作符 值的比较 对象身份比较 布尔类型 标准类型内建函数 标准类型总览 各种类型 不支持的类型 Python对象 Python使用 ...
- 20155333 2016-2017-2 《Java程序设计》第七周学习总结
20155333 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 Lambda 教材的引入循序渐近.深入浅出 Lambda去重复,回忆DRY原则 Lambda ...
- SQL sqlserver order by 1,order by 后面直接加数字,多个字段排序
①select * from table order by n 表示select里面的第n个字段 ②多个字段排序