UVa 12657 Boxes in a Line(数组模拟双链表)
题目链接
/*
问题
将一排盒子经过一系列的操作后,计算并输出奇数位置上的盒子标号之和 解题思路
由于数据范围很大,直接数组模拟会超时,所以采用数组模拟的链表,left[i]和right[i]分别表示i号盒子的左边是谁和右边
是谁。特别提醒,4这个操作可以采用其他的办法去标记,而不必真的去模拟交换,否则会超时。
*/ #include<cstdio>
#include<algorithm> using namespace std;
const int maxn=;
int n,left[maxn],right[maxn]; void link(int r,int l); int main()
{
//freopen("E:\\testin.txt","r",stdin);
int m,i,kase=;
while(scanf("%d%d",&n,&m) != EOF){
for(i=;i<=n;i++){
link(i,i+);
}
left[]=n;
right[n]=; int op,x,y;
int inv=;
while(m--){
scanf("%d",&op);
if(op == ) inv= !inv;
else{
scanf("%d%d",&x,&y);
if(op == && right[y] == x) swap(x,y);
if(op != && inv) op= -op;
if(op == && x==left[y]) continue;
if(op == && x==right[y]) continue; int lx=left[x],rx=right[x],ly=left[y],ry=right[y];
if(op == ){
link(lx,rx);
link(ly,x);
link(x,y);
}else if(op == ){
link(lx,rx);
link(y,x);
link(x,ry);
}else if(op == ){
if(right[x] == y){
link(y,x);
link(lx,y);
link(x,ry);
}
else{
link(lx,y);
link(y,rx);
link(ly,x);
link(x,ry);
}
}
}
} int cou=;
long long ans=;
for(int i=;i<=n;i++){
cou=right[cou];
//printf("#%d\n",cou);
if(i% == )
ans += cou;
}
if(inv && n% == ) ans = (long long)n*(n+)/ - ans;
printf("Case %d: %lld\n",kase++,ans);
}
return ;
} void link(int l,int r)
{
right[l]=r;
left[r]=l;
}
UVa 12657 Boxes in a Line(数组模拟双链表)的更多相关文章
- Problem UVA12657-Boxes in a Line(数组模拟双链表)
Problem UVA12657-Boxes in a Line Accept: 725 Submit: 9255 Time Limit: 1000 mSec Problem Description ...
- 数组模拟双链表,你get到了吗?
数组模拟双链表 通过前面的学习我们知道单链表是单个指针指向操作,那么通过类比我们可以把指针设定为两个,并且让它们分别指向前后数据,这就是"双向链表".使用这种链表,不仅可以从前往后 ...
- C - 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 ...
- 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的优越性,同时也考虑到使用实际 ...
- UVa12657 - Boxes in a Line(数组模拟链表)
题目大意 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.你可以执行四种指令: 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 ...
- 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 ...
- 【数组模拟的链表or复杂模拟】PAT-L2-002. 链表去重
L2-002. 链表去重 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须 ...
随机推荐
- 统计--VARCHAR与NVARCHAR在统计预估上的区别
最近遇到一个问题,当查询使用到模糊查询时,由于预估返回行数过高,执行计划认为索引查找+Key Lookup的成本过高,因此采用Clustered Index Scan的方式,消耗大量逻辑IO,执行计划 ...
- ServiceStack DateTime数据类型转Json出现的困扰
执行dotnet-new selfhost sstest 创建项目,然后打开解决方案 修改ssTest.ServiceModel中的Hello.cs,在HellopResponse中添加时间属性,然后 ...
- 浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序
本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析 ...
- 一分钟学会git
首先 克隆 源码地址 git clone git://github.com/jquery/jquery.git 更新 git pull查看状态 git status暂存所有(注意 . 表示全部暂存) ...
- 正则表达式中 re.match与re.search的区别
标签: 本文和大家分享的主要是python正则表达式中re.match函数与re.search方法的相关用法及异同点,希望通过本文的分享,能对大家有所帮助. re.match函数 re.match 尝 ...
- 杀掉所有 skynet 进程
ps aux | grep skynet | awk '/config/{print $2}' | xargs kill
- mysql创建账号及管理权限
mysql创建账号及管理权限 0.mysql版本8.0.15,服务器版本:RHEL 6.5 1.创建用户名密码 mysql> use mysql; mysql> create user ' ...
- poi 读取使用 Strict Open XML 保存的 excel 文档
poi 读取使用 Strict Open XML 保存的 excel 文档 某项目有一个功能需要读取 excel 报表内容,使用poi读取时报错: 具体错误为: org.apache.poi.POIX ...
- [Leetcode]303.区域和检索&&304.二维区域和检索
题目 1.区域和检索: 简单题,前缀和方法 乍一看就觉得应该用前缀和来做,一个数组多次查询. 实现方法: 新建一个private数组prefix_sum[i],用来存储nums前i个数组的和, 需要找 ...
- POJ 2487
#include<iostream> #include<stdio.h> using namespace std; int compare(void const * i,voi ...