• 操作4比较特殊,为了避免一次性修改所有元素的指针,由于题目只要求输出奇数盒子的编号,所以我们可以灵活的根据是否进行过操作4对操作1 操作2 进行改动
  • 操作3不受操作4影响

上代码。。。。

#include<cstdio>
#include<algorithm>
const int maxn=100000+5;
int right[maxn],left[maxn];
void link (int L,int R){right[L]=R;left[R]=L;
}
//在双向链表这样复杂的数据结构中,往往会编写一些辅助函数来设置链接关系
int main(){int m,n,kase=0;while(scanf("%d%d",&n,&m)==2){for(int i=1;i<=n;i++){right[i]=(i+1)%(n+1);left[i]=i-1;}right[0]=1;left[0]=n;int op,x,y,flag=0;while(m--){scanf("%d",&op);if (op==4) flag=!flag;//操作4是否执行奇数次else{scanf("%d%d",&x,&y);if(op==3&&right[y]==x) std::swap(x,y);//为了方便操作,避免重写第37行代码,当然你重写也可以if(op!=3&&flag) op=3-op;if(op==1&&x==left[y]) continue;//如果x已经在y的左边则忽略此指令if(op==2&&x==right[y]) continue;//如果x已经在y的右边则忽略此指令int lx=left[x],rx=right[x],ly=left[y],ry=right[y];if(op==1){//插入到x的左边并删除原来x结点的位置link(lx,rx);link(ly,x);link(x,y);}else if (op==2){//插入到y的右边并删除原来x结点的位置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);//y插入到x的位置link(ly,x);link(x,ry);//x插入到y的位置}}}}int b=0;long long ans=0;for (int i=1;i<=n;i++){b=right[b];if(i&1) ans+=b;}if(flag&&n%2==0) ans=(long long)n*(n+1)/2-ans;printf("Case %d: %lld\n",++kase,ans);}return 0;
}/*
样例输入:
6 4
1 1 4
2 3 5
3 1 6
4
6 3
1 1 4
2 3 5
3 1 6
100000 1
4
样例输出:
case 1: 12
case 2: 9
case 3: 2500050000
*/

  

转载于:https://www.cnblogs.com/mdz-great-world/p/6390029.html

Uva 12657 Boxes in a Line 双向链表相关推荐

  1. UVa 12657 - Boxes in a Line ( 双向链表 )

    题意 你有一行盒子,从左到右依次编号为1, 2, 3,-, n.可以执行以下4种指令: 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令). 2 X Y表示把盒子X移动到盒子Y ...

  2. UVA 12657 Boxes in a Line

    题目链接:https://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&page=show_proble ...

  3. 例题6-5 移动盒子(Boxes in a Line, UVa 12657)

    例题6-5 移动盒子(Boxes in a Line, UVa 12657) 双向链表(数组模拟) #include<iostream> #include<algorithm> ...

  4. 【UVA 12657】移动盒子 Boxes in a Line

    [UVA 12657]移动盒子 Boxes in a Line 洛谷题目地址 [题意] 一行有n 个盒子,从左到右编号为1-n.模拟以下4种命令. 1 X Y :将盒子X 移动到Y 的左侧(如果X 已 ...

  5. UVa 12657 双向链表

    UVa 12657 双向链表 转载于:https://www.cnblogs.com/daijkstra/p/4475452.html

  6. UVA12657 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 ...

  7. Boxes in a Line UVA - 12657 (双向链表)

    题目链接:https://vjudge.net/problem/UVA-12657 题目大意:输入n,m  代表有n个盒子 每个盒子最开始按1~n排成一行  m个操作, 1 x y  :把盒子x放到y ...

  8. 33行代码AC——例题6-5 移动盒子(Boxes in a Line, UVa 12657)——解题报告

    题目大意 对升序排列的n个数字(1开始编号)进行一系列操作,输出最终序列的奇位数之和.操作如下: 1 X Y:把X移到Y左侧 2 X Y:把X移到Y右侧 3 X Y:交换X和Y 4:反转序列(逆置) ...

  9. UVa 11174 - Stand in a Line

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

最新文章

  1. java从字符串中提取数字
  2. 正则表达式测试工具 Regex Tester 的使用方法
  3. python中文意思k-python-RepeatedKFold实际上是什么意思?
  4. 样式处理——提取样式文件
  5. IIR+双向滤波实现系统零相位相移_MATLAB仿真
  6. 程序员35岁之后的出路_我35岁,被裁员,开始给程序员规划人生
  7. 移动端页面0.5px border的实现
  8. 还在用Swagger?我推荐这款零代码侵入的接口管理神器!
  9. OpenCV-高斯低通高通滤波器(C++)
  10. ajax连接mysql数据库查询数据_ajax动态查询数据库数据并显示在前台的方法
  11. Oracle前10条记录
  12. Atitit 软件开发方法论 attilax著 艾龙 著 1. 1.3 软件工程方法 软件工程方法论分为软件开发方法论和软件组织方法论两个部分。 1 2. 软件开发方法的演进  SP DOP PAM
  13. CAD图纸格式转换怎么操作?如何转换常见图纸格式?
  14. Head First Java 目录结构
  15. Linux文件补全功能,Linux系统自动补全命令有哪些
  16. 使用Contect.Handler显示提交过来的“编辑成功”的信息
  17. android获取通讯录号码,Android跳转到通讯录获取用户名称和手机号码的实现思路...
  18. PyInstaller 的安装和使用(python生成exe文件)_联网安装
  19. idou教你学Istio10 : 如何用Istio实现K8S Egress流量管理
  20. 【人物专访】从12K到20+K,中间只差一个来学吧

热门文章

  1. centos安装docker详细步骤,如何配置阿里云镜像加速
  2. .NET也可以跨平台 Mono 2.10发布
  3. Undefined reference to ...
  4. 一个简单的微服务项目带你上手spring cloud 全家桶
  5. 军营中重重打击之后,我变了一个人(中)--我成为程序员所经历的(四)
  6. 共性的缺失——由博客想到的
  7. 2022-04-25 安装PostgreSQL的发现小bug
  8. Verilog常用算法-以2为求对数
  9. AppCan VS PhoneGap - 对比两大移动开发平台
  10. Memcache的使用和协议分析详解