B - 一行盒子
Description
你有一行盒子,从左到右依次编号为1, 2, 3,…, n。你可以执行四种指令:
1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令)。
2 X Y表示把盒子X移动到盒子Y右边(如果X已经在Y的右边则忽略此指令)。
3 X Y表示交换盒子X和Y的位置。
4 表示反转整条链。
指令保证合法,即X不等于Y。例如,当n=6时在初始状态下执行1 1 4后,盒子序列为2 3 1 4 5 6。接下来执行2 3 5,盒子序列变成2 1 4 5 3 6。再执行3 1 6,得到2 6 4 5 3 1。最终执行4,得到1 3 5 4 6 2。
Input
输入包含不超过10组数据,每组数据第一行为盒子个数n和指令条数m(1<=n,m<=100,000),以下m行每行包含一条指令。
Output
每组数据输出一行,即所有奇数位置的盒子编号之和。位置从左到右编号为1~n。
Sample Input
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
Sample Output
Case 1: 12
Case 2: 9
Case 3: 2500050000 难点在于第四种操作,第四种操作是反转,效果是前后继交换了,其实根本不需要操作,只需记录反转的 次数就行了。反转次数为奇数时,flag=1的操作变成flag=2的操作,flag=2的操作变成flag=1的操作,其他的不变。
因为反转后,一个数的前面变成后面,后面变成前面。还有就是构成环,方便找到起点和终点。
#include"stdio.h"
#include"string.h"
const int ms=;
int left[];
int right[];
int *tmp1,*tmp2;
inline void link(int a,int b)
{
right[a]=b;
left[b]=a;
}
int main()
{
int n,m,i,j,k,flag,x,y,p=,cnt,next;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=;i<=n;i++)
{
left[i]=i-;
right[i]=i+;
}
right[n]=;//构成环,方便寻找开始节点和结束节点
cnt=;
while(m--)
{
scanf("%d",&flag);
if(flag!=)
scanf("%d%d",&x,&y);
else
cnt++;
if((cnt&)&&flag<)
flag=-flag;
if(flag==&&(right[x]!=y))
{
if(right[y]==x)
{
int t1=left[x],t2=right[x],t3=left[y],t4=right[y];
link(t3,x);
link(x,y);
link(y,t2);
}
else
{
link(left[x],right[x]);
link(left[y],x);
link(x,y);
}
}
else if(flag==&&right[y]!=x)
{
if(right[x]==y)
{
int t1=left[x],t2=right[x],t3=left[y],t4=right[y];
link(t1,y);
link(y,x);
link(x,t4);
}
else
{
link(left[x],right[x]);
link(x,right[y]);
link(y,x);
}
}
else if(flag==)
{
if(right[x]==y)
{
int t1=left[x],t2=right[x],t3=left[y],t4=right[y];
link(t1,y);
link(y,x);
link(x,t4);
}
else if(right[y]==x)
{
int t1=left[x],t2=right[x],t3=left[y],t4=right[y];
link(t3,x);
link(x,y);
link(y,t2);
}
else{
int t1=left[x],t2=right[x],t3=left[y],t4=right[y];
link(t1,y);
link(y,t2);
link(t3,x);
link(x,t4);
}
}
}
long long ans=;
if(cnt&)
{
tmp2=right;
tmp1=left;
}
else
{
tmp2=left;
tmp1=right;
}
for(i=;i<=n;i++)
{
if(tmp2[i]==)
{
for(k=;i;i=tmp1[i],k++)
if(k&)
ans+=i;
printf("Case %d: %lld\n",p++,ans);
break;
}
}
}
return ;
}
B - 一行盒子的更多相关文章
- csuoj 1329: 一行盒子
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1329 1329: 一行盒子 Time Limit: 1 Sec Memory Limit: 12 ...
- csu 1329 一行盒子(链表操作)
1329: 一行盒子 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 693 Solved: 134 [Submit][Status][Web Boa ...
- CSU 1329: 一行盒子
1329: 一行盒子 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 740 Solved: 145[Submit][Status][Web Board ...
- CSUOJ1329——一行盒子_湖南省第九届大学生计算机程序设计竞赛
题目是中文的我就不是说明了,比赛的时候看过题目后队友说是splay来做,细想来省赛不会出这么坑的题目吧. 于是比赛还有一个小时左右把该做的都做完了以后,我们队三个人都来思考这个题目了.不过还好很快我们 ...
- CSUOJ 1329 一行盒子(数组模拟链表)
题目:id=1329">http://acm.csu.edu.cn/OnlineJudge/problem.php? id=1329 题意: watermark/2/text/aHR0 ...
- COJ 0018 移动盒子
20605移动盒子 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 你有一行盒子,从左到右依次编号为1,2,3,……,n.可以执 ...
- Uva 12657 移动盒子(双向链表)
题意: 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.可以执行以下4种指令:1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y右 ...
- UVa12657 - Boxes in a Line(数组模拟链表)
题目大意 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.你可以执行四种指令: 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y ...
- 比float更好的页面布局inline-block
一:页面布局的发展过程 桌格设计 表格+css div+css的浮动布局 div+css的内联块布局 二:流行多年的浮动布局的优劣 优势: div+css浮动布局的优势,主要是相对于table布局来说 ...
随机推荐
- MFC学习知识点20160715
1. sizeof() :返回所查询目标所占用字节数 _countof() :返回所查询目标所含有元素个数 _countof 是 C++中计算一个固定大小数组长度的宏,比如: T arr[10] ...
- 百度,你家云管家能靠谱点不?替你脸红!Shame on you!
此文已提交百度云问题反馈, 坐等答复. 笔者最近下载某24+G分卷压缩文件, 24+G啊, 足足要下将近7个小时.满心欢喜的下载完却尼玛发现解压出错, 有6个文件无法解压?wrong password ...
- hive-mysql安装配置
默认情况下,hive的元数据信息存储在内置的Derby数据中.Facebook将hive元数据存储在关系数据库 1.安装好mysql ,sudo apt-get install mysql-serve ...
- 从零教你在Linux环境下(ubuntu)如何编译hadoop2.4
问题导读: 1.如果获取hadoop src maven包?2.编译hadoop需要装哪些软件?3.如何编译hadoop2.4?扩展:编译hadoop为何安装这些软件? 本文链接 http://ww ...
- work5
这一次写的内容是黄金豆小游戏,由于现在偏重写服务器端.对于算法层面其实涉及不多,更多偏于工程上的架构. 总而言之本次作业的服务器核心是用web.py所写,而且为了方便其他用户写客户端,架构非常简单. ...
- java 字符串String操作工具类
/** * StrKit. */ public class StrKit { /** * 首字母变小写 */ public static String firstCharToLowerCase(Str ...
- BZOJ 2243: [SDOI2011]染色 (树链剖分+线段树合并)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2243 树链剖分的点剖分+线段树.漏了一个小地方,调了一下午...... 还是要细心啊! 结 ...
- Enterprise Library 服务问题
在使用Enterprise Library而没有注册服务的时候会出现这样的问题,"Editing Post "Failed to create instances of perfo ...
- DevExpress.XtraGrid的使用(部分)
(三) XtraGrid的功能与GridView的功能相似,使用方法也类似,不过他的功能更加令人惊讶,看看下面的效果 Code//生成此效果的解决方案: // 1.从数据库去出两张表, //后台 Sq ...
- Ext.tree.Panel Extjs 在表格中添加树结构,并实现节点移动功能
最近在用Extjs 做后台管理系统,真的非常好用.总结的东西分享一下. 先展示一下效果图 好了,开始吧! 首先说一下我的创建结构: 一.构造内容 这个函数中包括store的创建,treePanel的创 ...