UVA 12657 Boxes in a Line
双向链表
注意:如果算法是最后处理翻转情况时,注意指令4翻转后1,2两个指令也要翻转处理;
指令3 中交换盒子要注意两个盒子相邻的情况
#include <iostream>
#include <cstring>
using namespace std; int ri[],le[]; void link (int l,int r){
ri[l]=r;le[r]=l;
} void moveleft (int l,int r){
link (le[l],ri[l]);
link (le[r],l);
link (l,r);
} void moveright (int l,int r){
link (le[l],ri[l]);
link (l,ri[r]);
link (r,l);
} void exchange (int l,int r){
int ll,rl,lr,rr;
ll=le[l];rl=ri[l];lr=le[r];rr=ri[r];
if (ll==r){
link (lr,l);link (l,r);link (r,rl);
}
else if (l==lr){
link (ll,r);link (r,l);link (l,rr);
}
else {
link (ll,r);link (r,rl);
link (lr,l);link (l,rr);
}
} int main (){
int n,m,kase=,inv;
while (cin>>n>>m){
inv=;
memset (ri,,sizeof ri);
memset (le,,sizeof le);
for (int i=;i<=n;i++)
link (i,i+);
for (int i=;i<m;i++){
int c;
cin>>c;
if (c==)
inv++;
else {
int x,y;
cin>>x>>y;
if (x==y)
continue ;
if (inv%) //经过指令4后指令1,2也要翻转处理;
c=-c;
if (c==){
moveleft (x,y);
}
else if (c==){
moveright (x,y);
}
else {
exchange (x,y);
}
}
//int temp=0;
//for (int i=ri[0];i<=n&&temp<n;i=ri[i]){
// cout<<i<<" ";
// temp++;
//}
}
long long ans=;
int f;
if (n%)
f=;
else f=inv%;
int temp=;
for (int i=ri[];i<=n&&temp<n;i=ri[i]){// cout<<ri[i]<<" ";
if (temp%==f){
ans+=i;
}
temp++;
}
cout<<"Case "<<++kase<<": ";
cout<<ans<<endl;
}
return ;
}
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 双向链表
题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47066 利用链表换位置时间复杂度为1的优越性,同时也考虑到使用实际 ...
- UVa 12657 Boxes in a Line(数组模拟双链表)
题目链接 /* 问题 将一排盒子经过一系列的操作后,计算并输出奇数位置上的盒子标号之和 解题思路 由于数据范围很大,直接数组模拟会超时,所以采用数组模拟的链表,left[i]和right[i]分别表示 ...
- 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(双向链表)
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 ...
- uva 11174 Stand in a Line
// uva 11174 Stand in a Line // // 题目大意: // // 村子有n个村民,有多少种方法,使村民排成一条线 // 使得没有人站在他父亲的前面. // // 解题思路: ...
- 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 ...
随机推荐
- CSS布局部分知识总结
一 切图 通过一个周的切图练习,我发现只有亲自动手后才能通过问题不断加深技术,要熟练掌握HTML页面编写时候时PHOTOSHOP操作. 以下一些知识点在网络布局时也是很重要的. 1.ul标签在谷歌.火 ...
- haproxy之负载均衡算法
backend blance 算法 动态hash的特点 服务器运行时就可进行权重调整,即只需要重新载入配置文件即可,不需要重新启动haproxy 支持慢速启动,即重新恢复的后端 ...
- javascrit字符串截取
昨天遇见一个问题就是一个地址后面加参数第一次是需要添加参数,以后每次点击按钮的时候是替换如果不进行处理的话如果页面不刷新,地址会不断的添加越来越长,所以
- c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter
1.XmlTextWriter 表示提供快速.非缓存.只进方法的编写器,该方法生成包含 XML 数据(这些数据符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议)的流或文 ...
- 从一道面试题谈linux下fork的运行机制
http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html
- C# Stopwatch类_性能_时间计时器
在研究性能的时候,完全可以使用Stopwatch计时器计算一项技术的效率.但是有时想知道某想技术的性能的时候,又常常想不起可以运用Stopwatch这个东西,太可悲了. 属性: Elapsed 获取当 ...
- linux date
我使用过的Linux命令之date - 显示.修改系统日期时间 本文链接:http://codingstandards.iteye.com/blog/1157513 (转载请注明出处) 用途说明 ...
- 深入浅出Node.js (2) - 模块机制
2.1 CommonJS规范 2.1.1 CommonJS的出发点 2.1.2 CommonJS的模块规范 2.2 Node的模块实现 2.2.1 优先从缓存加载 2.2.2 路径分析和文件定位 2. ...
- CentOS、Ubuntu、Debian三个linux比较异同
Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本. 商业版本以Redhat为代表,开源社区版本则以debian为代表.这些版本各有不同的特点, ...
- Triangle 解答
Question Given a triangle, find the minimum path sum from top to bottom. Each step you may move to a ...