移动盒子,紫书P144UVa12657
来源:互联网 发布:数控车宏程序编程实例 编辑:程序博客网 时间:2024/05/17 22:50
本题是双向链表的典型应用。用数组模拟链表在算法竞赛中是非常实用并且高效的做法。本题刘代码中最值得学习的地方是link函数的使用,缩短了代码的复杂度。至于本题的思路比较直接,照着题目的要求操作即可。
// UVa12657 Boxes in a Line// Rujia Liu#include<cstdio>#include<algorithm>using namespace std;const int maxn = 100000 + 5;int n, left[maxn], right[maxn];inline void link(int L, int R) { right[L] = R; left[R] = L;}int main() { int m, kase = 0; while(scanf("%d%d", &n, &m) == 2) { for(int i = 1; i <= n; i++) { left[i] = i-1; right[i] = (i+1) % (n+1); } right[0] = 1; left[0] = n; int op, X, Y, inv = 0; while(m--) { scanf("%d", &op); if(op == 4) inv = !inv; else { scanf("%d%d", &X, &Y); if(op == 3 && right[Y] == X) swap(X, Y); if(op != 3 && inv) op = 3 - op; if(op == 1 && X == left[Y]) continue; if(op == 2 && X == right[Y]) continue; int LX = left[X], RX = right[X], LY = left[Y], RY = right[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(op == 3) { if(right[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 = 0; long long ans = 0; for(int i = 1; i <= n; i++) { b = right[b]; if(i % 2 == 1) ans += b; } if(inv && n % 2 == 0) ans = (long long)n*(n+1)/2 - ans; printf("Case %d: %lld\n", ++kase, ans); } return 0;}
阅读全文
0 0
- 移动盒子,紫书P144UVa12657
- uva 12657 移动盒子
- uva12657 移动盒子
- 【刷题】移动盒子问题
- dom04 移动盒子案例
- UVA12657 移动盒子 链表
- js盒子联动移动公式
- javascript拖拽盒子移动的实现
- 移动Web开发基础-比例盒子
- 盒子
- 跟着鼠标移动的动态DIV盒子插件
- 盒子支付首创音频供电移动POS机
- js盒子抛物线移动(购物车动画效果)
- 移动端布局 Css3 弹性盒子模型封装 display:box;
- 通过键盘控制盒子的移动与缩放
- 浅析移动DIV盒子自动测算电脑屏幕XY坐标显示
- 移动web开发五之商品内容主体盒子
- 10-16盒子的移动与停止、表格的排序
- Linux下常用网络命令
- SmartUpload 文件的上传
- php实现Ajax带有验证码的登陆注册功能
- DB2 数据管理服务器
- day04-css进阶
- 移动盒子,紫书P144UVa12657
- laravel个人总结--模板方面--(二)
- oracle用户登录的3种认证方式
- [Learn]Android touch事件传递机制
- netty源码分析(五)Netty服务器地址绑定底层源码分析
- HTM(皮质学习)Youtube课程学习笔记一(episode 1,2,3)
- 流式容器格式flv/TS
- CTS/GTS 网络环境搭建
- 51nod 1428 活动安排问题