1.  

Description

  1.  

你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2)。其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y右边。 指令保证合法,即X不等于Y。 例如,初始状态1,2,3,4,5,6的小球执行1 1 4后,小球1被移动到小球4的左边,即2,3,1,4,5,6。如果再执行2 3 5,结点3将会移到5的右边,即2,1,4,5,3,6。

  1.  

Input

  1.  

第一行为一个整数t(0<t<10),表示测试用例个数。每个测试用例的第一行为两个整数n(1<n<=500000)和m(0<m<100000),n表示小球的个数,m为指令条数,以下m行每行为一条指令。

  1.  

Output

  1.  

为每个测试用例单独输出一行,从左到右输出最后序列,每个数字后面跟一个空格。

  1.  
  2. 1 #include<iostream>
  3. using namespace std;
  4. struct
  5. {
  6. int l;
  7. int r;
  8. }data[]; //尽量大
  9. int main()
  10. {
  11. int t,n,m,i,h,u;
  12. int control,x,y;
  13. cin>>t;
  14. for(int w=;w<t;w++)
  15. {
  16. cin>>n>>m;
  17. data[].r=;
  18. data[n+].l=n;
  19. for(i=;i<=n;i++)
  20. {
  21. data[i].l=i-;
  22. data[i].r=i+;
  23. }
  24. for(int d=;d<m;d++)
  25. {
  26. cin>>control>>x>>y;
  27. data[data[x].l].r=data[x].r;
  28. data[data[x].r].l=data[x].l;
  29. if(control==)
  30. {
  31. data[x].l=data[y].l;
  32. data[x].r=y;
  33. data[data[y].l].r=x;
  34. data[y].l=x;
  35. }
  36. else
  37. {
  38. data[x].l=y;
  39. data[x].r=data[y].r;
  40. data[data[y].r].l=x;
  41. data[y].r=x;
  42. }
  43. }
  44. h=;
  45. for( u=;u<=n;u++)
  46. {
  47. cout<<data[h].r<<" ";
  48. h=data[h].r;
  49. }
  50. cout<<endl;
  51. }
  52. return ;
  53. }

如果用小球的绝对位置来做,每动一个小球其他小球的位置信息都要改,应该(肯定)会超时,如果只用相对位置做的话,每次只要改几个相关小球的位置信息就好了,效率高很多。(l左,r右)

下面是绝对位置堆栈来做:(可运行,sicily不通过)

  1. #include<iostream>
  2. #include<stack>
  3. using namespace std;
  4. int main()
  5. {
  6. stack<int> a;
  7. stack<int> b;
  8. int n,i,zhiling,x,y,save,temp,temp1;
  9. int r;
  10. int t;
  11. cin>>t;
  12. for(r=;r<t;r++)
  13. {
  14. cin>>n;
  15. for(i=;i<=n;i++)
  16. a.push(i);
  17. int m;
  18. cin>>m;
  19. int j;
  20. for(j=;j<m;j++)
  21. {
  22. cin>>zhiling>>x>>y;
  23. if(zhiling==)
  24. {
  25. for(i=;i<=n;i++)
  26. {
  27. if(a.top()!=x)
  28. {
  29. temp=a.top();
  30. a.pop();
  31. b.push(temp);
  32. }
  33. else
  34. {
  35. save=a.top();
  36. a.pop();
  37. }
  38. }
  39. for(i=;i<=n-;i++)
  40. {
  41. if(b.top()!=y)
  42. {
  43. temp1=b.top();
  44. b.pop();
  45. a.push(temp1);
  46. }
  47. else
  48. {
  49. a.push(save);
  50. temp1=b.top();
  51. b.pop();
  52. a.push(temp1);
  53. }
  54. }
  55. }
  56. if(zhiling==)
  57. {
  58. for(i=;i<=n;i++)
  59. {
  60. if(a.top()!=x)
  61. {
  62. temp=a.top();
  63. a.pop();
  64. b.push(temp);
  65. }
  66. else
  67. {
  68. save=a.top();
  69. a.pop();
  70. }
  71. }
  72. for(i=;i<=n-;i++)
  73. {
  74. if(b.top()!=y)
  75. {
  76. temp1=b.top();
  77. b.pop();
  78. a.push(temp1);
  79. }
  80. else
  81. {
  82. temp1=b.top();
  83. b.pop();
  84. a.push(temp1);
  85. a.push(save);
  86. }
  87. }
  88. }
  89. }
  90. int w[];
  91. for(i=;i<n;i++)
  92. {
  93. w[i]=a.top();
  94. a.pop();
  95. }
  96. for(i=n-;i>=;i--)
  97. {
  98. cout<<w[i]<<" ";
  99. }
  100. cout<<endl;
  101. }
  102. return ;
  103. }

下面是绝对位置数组来做:(可运行,sicily不通过,好LOW)

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int t;
  6. cin>>t;
  7. for(int e=;e<t;e++){
  8. int n;
  9. cin>>n;
  10. int a[];
  11. int b[];
  12. int count;
  13. for(int o=;o<;o++)
  14. a[o]=;
  15. int zhiling,x,y,w;
  16. for(int i=;i<=n;i++)
  17. a[i]=i;
  18. int m;
  19. cin>>m;
  20. for(int j=;j<m;j++)
  21. {
  22. cin>>zhiling>>x>>y;
  23. if(zhiling==)
  24. {
  25. for(w=n+;w>=y+;w--)
  26. {
  27. a[w]=a[w-];
  28. }
  29. a[y]=x;
  30. for(w=;w<=n+;w++)
  31. {
  32. if(a[w]==x&&a[w+]!=y)
  33. {
  34. a[w]=;
  35. }
  36. }
  37.  
  38. }
  39. if(zhiling==)
  40. {
  41. for(w=n+;w>=y+;w--)
  42. {
  43. a[w]=a[w-];
  44. }
  45. a[y+]=x;
  46. for(w=;w<=n+;w++)
  47. {
  48. if(a[w]==x&&a[w-]!=y)
  49. {
  50. a[w]=;
  51. }
  52. }
  53.  
  54. }
  55. count=;
  56. for(int c=;c<;c++)
  57. {
  58. if(a[c]!=)
  59. {
  60. b[count]=a[c];
  61. count++;
  62. }
  63. }
  64. for(int s=;s<=n;s++)
  65. {
  66. a[s]=b[s];
  67. }
  68. }
  69. for(int k=;k<=n;k++)
  70. {
  71. cout<<a[k]<<" ";
  72. }
  73. cout<<endl;
  74. }
  75. return ;
  76. }

sicily 1934. 移动小球的更多相关文章

  1. 【sicily】 1934. 移动小球

    Description 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2).其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y ...

  2. 【webGl】threejs实现一个简单的动画-弹跳的小球

    在这里,我们将动态画面简称为动画(animation).正如动画片的原理一样,动画的本质是利用了人眼的视觉暂留特性,快速地变换画面,从而产生物体在运动的假象.而对于Three.js程序而言,动画的实现 ...

  3. HTML5 Canvas彩色小球碰撞运动特效

    脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效.   效果展示 http://hovertree.com/texiao/html5/39/ ...

  4. 纯CSS3实现3D跳动小球

    请使用Chrome,火狐的浏览器查看本页面,使用IE将看不到效果.如果在本页看不到一个跳动的小球,请确定您的浏览器支持CSS3,或者访问http://keleyi.com/a/bjac/iphgrtq ...

  5. HTML5 随机弹跳的小球

    查看效果:http://keleyi.com/a/bjad/tc1y11dy.htm Chrome效果图: 火狐效果图:推荐:http://hovertree.com/texiao/css3/18/ ...

  6. sicily 中缀表达式转后缀表达式

    题目描述 将中缀表达式(infix expression)转换为后缀表达式(postfix expression).假设中缀表达式中的操作数均以单个英文字母表示,且其中只包含左括号'(',右括号‘)’ ...

  7. WPF实现物理效果 拉一个小球

    一直以来都对物理效果有神秘感,完全不知道怎么实现的.直到看到了周银辉在老早前写的一篇博客:http://www.cnblogs.com/zhouyinhui/archive/2007/06/23/79 ...

  8. HTML5CSS3特效-上下跳动的小球-遁地龙卷风

    (-1)写在前面 我用的是chrome49,这个idea是我在stackoverflow上回答问题时看到了,多谢这位同行,加深了我对很多技术点的理解,最近刚到北京,忙碌了一两天,在后续的日子里,会被安 ...

  9. 【web前端学习部落22群】分享 碰撞的小球开源小案例

    对于课程中的疑问,大家可以加 web前端学习部落22群 120342833和其他老师还有众多的小伙伴们进行沟通交流哦,群里还有不少技术大拿.行业大牛 可以一起探讨问题,我们也会安排专业的技术老师为大家 ...

随机推荐

  1. ECMA中的switch语句

    switch借鉴自其他语言,但也有自己的特色. 1.可以在switch语句中使用任何数据类型(数值.字符串.对象等),很多其他语言中只能使用数值. 2.每个case的值不一定是常量,可以是变量或者表达 ...

  2. [转]ping检测网络连接异常

    转载地址:http://blog.csdn.net/feizxiang3/article/details/26672781 一般来说当出现网络无法连接时,习惯性的用ping命令来ping某个ip地址, ...

  3. springMVC下集成active MQ发送邮件

    环境:本地需安装activemq,且访问正常,安装方法网上很多,这里省略. 1.添加相关jar包,我这里使用的是maven,你也可以选择其他方式添加.下面是maven相关配置: <!-- Act ...

  4. Node.js怎么处理数据库中日期类型

    问题描述:在数据库里存储时间的时候明明显示的是类如2016-12-22的形式,读取出来后却变成了大概是这样的:Fri May 17 2016 14:12:33 GMT+0800 (中国标准时间) 处理 ...

  5. 安装AdventureWorks2008R2

    在微软的网站,有介绍安装示例数据库AdventureWorks的说明. 你可以在这里下载到压缩包 (AdventureWorks2008R2_Database.zip),解压后会得到两个文件: Adv ...

  6. VM出现该虚拟机正在使用中的提示,让获取所有权限解决办法

    今天打开虚拟机正要学习,结果说是虚拟机似乎正在使用中,让我重新获取权限.解决办法:打开提示的配置文件的位置,将一个以.lck结尾的文件夹删除或者保存为另外的文件名称,再打开虚拟机就OK了.

  7. 中文 iOS/Mac 开发博客列表(转)

    转自https://github.com/tangqiaoboy/iOSBlogCN 中文 iOS/Mac 开发博客列表 本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息. 本博客列表 ...

  8. 添加 index_combine hint的索引

    想试验一下 index_combine这个hint,于是做了如下试验. 1.创建一个具有若干index的表 SQL> create table test as select object_id, ...

  9. CSS下拉列表错误纠正

    上一篇关于CSS制作下来列表的错误纠正. 在上一篇中,用CSS只做了下拉列表,但是鼠标不放在导航栏上的时候,下拉列表也是出来的.具体错误就是 div ul{ list-style:none; max- ...

  10. BW知识问答锦集

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...