省赛B题。。。。
手写链表。。其实很简单的。。。。
比赛时太急了,各种手残。。。。没搞出来。。。。要不然就有金了。。。
注:对相邻的元素需要特判。。。。。

Problem B

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 simulate 4 kinds of commands:

  • 1 X Y: move box X to the left to Y (ignore this if X is already the left of Y)
  • 2 X Y: move box X to the right to Y (ignore this if X is already the right of Y)
  • 3 X Y: swap box X and Y
  • 4: reverse the whole line.

Commands are guaranteed to be valid, i.e. X will be not equal to Y.

For example, if n=6, after executing 1 1 4, the line becomes 2 3 1 4 5 6. Then after executing 2 3 5, the line becomes 2 1 4 5 3 6. Then after executing 3 1 6, the line becomes 2 6 4 5 3 1. Then after executing 4, then line becomes 1 3 5 4 6 2

Input

There will be at most 10 test cases. Each test case begins with a line containing 2 integers n, m(1<=n, m<=100,000). Each of the following m lines contain a command.

Output

For each test case, print the sum of numbers at odd-indexed positions. Positions are numbered 1 to n from left to right.

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

Output for the Sample Input

Case 1: 12
Case 2: 9
Case 3: 2500050000


The Ninth Hunan Collegiate Programming Contest (2013)
Problemsetter: Rujia Liu
Special Thanks: Feng Chen, Md. Mahbubul Hasan

#include <iostream>
#include <cstdio>
#include <cstring> #define toleft p
#define toright p^1 using namespace std; const int INF=0x3f3f3f3f;
typedef long long int LL; int lian[][],n,m,p; void Init()
{
p=;
for(int i=;i<=n;i++)
{
lian[i][]=i-;
lian[i][]=i+;
}
lian[][toleft]=INF;
lian[][toright]=;
lian[n+][toleft]=n;
lian[n+][toright]=INF;
} void cmdfour()
{
p=p^;
} void cmdone(int x,int y)
{
int xl=lian[x][toleft],xr=lian[x][toright];
int yl=lian[y][toleft],yr=lian[y][toright]; if(xr==y) return; lian[xl][toright]=xr;
lian[xr][toleft]=xl; lian[x][toright]=y;
lian[x][toleft]=yl; lian[yl][toright]=x;
lian[y][toleft]=x;
} void cmdtwo(int x,int y)
{
int xl=lian[x][toleft],xr=lian[x][toright];
int yl=lian[y][toleft],yr=lian[y][toright]; if(xl==y) return; lian[xl][toright]=xr;
lian[xr][toleft]=xl; lian[x][toleft]=y;
lian[x][toright]=yr; lian[y][toright]=x;
lian[yr][toleft]=x;
} void cmdthree(int x,int y)
{
int xl=lian[x][toleft],xr=lian[x][toright];
int yl=lian[y][toleft],yr=lian[y][toright]; if(xr!=y&&xl!=y)
{
lian[x][toleft]=yl;
lian[x][toright]=yr;
lian[yl][toright]=x;
lian[yr][toleft]=x; lian[y][toleft]=xl;
lian[y][toright]=xr;
lian[xl][toright]=y;
lian[xr][toleft]=y;
}
else
{
if(xr==y)
{
lian[x][toright]=yr;
lian[x][toleft]=y; lian[y][toright]=x;
lian[y][toleft]=xl; lian[xl][toright]=y;
lian[yr][toleft]=x;
}
else if(xl==y)
{
lian[x][toleft]=yl;
lian[x][toright]=y; lian[y][toleft]=x;
lian[y][toright]=xr; lian[xr][toleft]=y;
lian[yl][toright]=x;
} }
} LL getSum()
{
LL ans=;
int cnt=,pos=;
if(n%==||p==)
{
if(p) p=;
while(true)
{
if(cnt&) ans+=(LL)lian[pos][toright];
pos=lian[pos][toright];
cnt++;
if(cnt>=n+) break;
}
}
else if(p==)
{
if(p) p=;
while(true)
{
if(cnt%==) ans+=(LL)lian[pos][toright];
pos=lian[pos][toright];
cnt++;
if(cnt>=n+) break;
}
}
return ans;
} int main()
{
int cas=,cmd,x,y;
while(scanf("%d%d",&n,&m)!=EOF)
{
Init(); while(m--)
{
scanf("%d",&cmd);
if(cmd==)
{
scanf("%d%d",&x,&y);
cmdone(x,y);
}
else if(cmd==)
{
scanf("%d%d",&x,&y);
cmdtwo(x,y);
}
else if(cmd==)
{
scanf("%d%d",&x,&y);
cmdthree(x,y);
}
else if(cmd==)
{
cmdfour();
}
}
LL ans=getSum();
printf("Case %d: %lld\n",cas++,ans);
}
return ;
}

Problem B Boxes in a Line的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 sim ...

  4. 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 ...

  5. 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 ...

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

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

    题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47066 利用链表换位置时间复杂度为1的优越性,同时也考虑到使用实际 ...

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

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

  9. 2019 SCUT SE 新生训练第四波 L - Boxes in a Line——双向链表

    先上一波题目 https://vjudge.net/contest/338760#problem/L 这道题我们维护一个双向链表 操作1 2 3 都是双向链表的基本操作 4操作考虑到手动将链表反转时间 ...

随机推荐

  1. 屠蛟之路_重伤的屠蛟俊_ThirdDay

    在屠蛟少年们重登数据库大山的途中,少年屠蛟俊(511)实力扛把子,一直坚持在队伍前头开路引领.披荆斩棘,却也因为一路与险水恶林.狂禽猛兽做战斗而精力受损,最终一不小心坠进beta怪蛟设置的陷阱深洞里, ...

  2. HTML5学习总结-10 Android 控件WebView显示网页

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient 1)setWebClient: ...

  3. MooseFs-分布式文件系统系列(四)之简单聊聊MFS的日常维护

    回顾 文件或目录的额外属性(noower,noattracache和noentrycache),可以通过MFS提供的命令(mfsgeteattr,mfsseteattr,mfsdeleattr等)检查 ...

  4. ubuntu默认防火墙

    ubuntu 9.10默认的是UFW防火墙,已经支持界面操作了.在命令行运行ufw命令就可以看到提示的一系列可进行的操作. 最简单的一个操作:sudo ufw status可检查防火墙的状态,我的返回 ...

  5. HTML CSS + DIV实现整体布局

    HTML CSS + DIV实现整体布局 1.技术目标: 开发符合W3C标准的Web页面 理解盒子模型 实现DIV+CSS整体布局 2.什么是W3C标准? W3C:World Wide Web Con ...

  6. UILabel UISwitch UISegmentedControl UIAlertView

    基础小控件 /***************************************UIlabel*************************************/ UILabel ...

  7. 转换流——OutputStreamWriter类与InputStreamReader类

    字节流和字符流的转换类 OutputStreamWriter:是Writer的子类,将输出的字符流变成字节流 InputStreamReader:是Reader的子类,将输入的字节流变成字符流 将字节 ...

  8. ecshop分页

    php代码 $page = $_GET['page']; //当前是第几页 $count = grab_promote_goods_count(); // 一个有多少条 $size= '; ){ $p ...

  9. php 下载文件的函数

    通过函数完成下载文件的PHP功能代码 function download($url, $filename) { // 获得文件大小, 防止超过2G的文件, 用sprintf来读 $filesize = ...

  10. MYSQL 免安装版(windows 7/64)

    本文介绍在本地安装MYSQL数据库,免安装版相关配置 一.下载 mysql下载地址1:http://dev.mysql.com/downloads/mysql/ 二.解压MySQL压缩包 将已下载的M ...