题目链接

 /*
问题
将一排盒子经过一系列的操作后,计算并输出奇数位置上的盒子标号之和 解题思路
由于数据范围很大,直接数组模拟会超时,所以采用数组模拟的链表,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(数组模拟双链表)的更多相关文章

  1. Problem UVA12657-Boxes in a Line(数组模拟双链表)

    Problem UVA12657-Boxes in a Line Accept: 725  Submit: 9255 Time Limit: 1000 mSec Problem Description ...

  2. 数组模拟双链表,你get到了吗?

    数组模拟双链表 通过前面的学习我们知道单链表是单个指针指向操作,那么通过类比我们可以把指针设定为两个,并且让它们分别指向前后数据,这就是"双向链表".使用这种链表,不仅可以从前往后 ...

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

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

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

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

  6. UVa12657 - Boxes in a Line(数组模拟链表)

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

  7. UVA 12657 Boxes in a Line

    双向链表 注意:如果算法是最后处理翻转情况时,注意指令4翻转后1,2两个指令也要翻转处理: 指令3 中交换盒子要注意两个盒子相邻的情况 #include <iostream> #inclu ...

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

  9. 【数组模拟的链表or复杂模拟】PAT-L2-002. 链表去重

    L2-002. 链表去重 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须 ...

随机推荐

  1. jQuery插件初级练习5答案

    html: $.kafei.fontsize($("p"),"30px").html("123") jQuery: $.kafei={ fo ...

  2. firefox浏览器testclient测试接口

  3. delphi 过滤开头 结尾 全部 空格的函数

    function TrimAnsi(const S: AnsiString): Ansistring; var I, L: Integer; begin L := Length(S); I := ; ...

  4. .net 使用HtmlAgilityPack做爬虫

    HtmlAgilityPack官网:https://html-agility-pack.net/?z=codeplex .net中使用HtmlAgilityPack做爬虫步骤: 1.在nuget中安装 ...

  5. Winform解决界面重绘闪烁的问题

    在窗体或用户控件中重写CreateParams protected override CreateParams CreateParams { get { CreateParams cp = base. ...

  6. WPF 分享一种背景动画效果

    今天看微软的一个Samples,发现一个蛮好玩的背景样式,如下图所示: 风格比较卡哇伊. <Window x:Class="WPFSamplesTest.MainWindow" ...

  7. 新建WebAPI项目时遇到的问题

    1   处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler” 以管理员运行下面的命令注册 ...

  8. 拿 .properties 这种里面的数据 在不同的地方

    1 在xml中 2 在.java中 @Value("#{configProperties['key']}")    configProperties不是固定(根据配置时的id)  ...

  9. cad2020卸载/安装失败/如何彻底卸载清除干净cad2020注册表和文件的方法

    cad2020提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装cad2020失败提示cad2020安装未完成,某些产品无法安装,也有时候想重新安装cad2020 ...

  10. jdk1.8+SpringAOP注解报java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut select错误的不知原因的解决办法[仅供参考]

    先说办法:如果Aspectweaver-1.*.*jar这三个包版本比较低, 比如1.5.0这一层次的,可以找版本高一点的包替换低版本的包,问题可以得到解决 jar包的下载地址:https://mvn ...