Description


你有一些小球,从左到右依次编号为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。


Input


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


Output


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


 1 #include<iostream>
using namespace std;
struct
{
int l;
int r;
}data[]; //尽量大
int main()
{
int t,n,m,i,h,u;
int control,x,y;
cin>>t;
for(int w=;w<t;w++)
{
cin>>n>>m;
data[].r=;
data[n+].l=n;
for(i=;i<=n;i++)
{
data[i].l=i-;
data[i].r=i+;
}
for(int d=;d<m;d++)
{
cin>>control>>x>>y;
data[data[x].l].r=data[x].r;
data[data[x].r].l=data[x].l;
if(control==)
{
data[x].l=data[y].l;
data[x].r=y;
data[data[y].l].r=x;
data[y].l=x;
}
else
{
data[x].l=y;
data[x].r=data[y].r;
data[data[y].r].l=x;
data[y].r=x;
}
}
h=;
for( u=;u<=n;u++)
{
cout<<data[h].r<<" ";
h=data[h].r;
}
cout<<endl;
}
return ;
}

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

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

 #include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> a;
stack<int> b;
int n,i,zhiling,x,y,save,temp,temp1;
int r;
int t;
cin>>t;
for(r=;r<t;r++)
{
cin>>n;
for(i=;i<=n;i++)
a.push(i);
int m;
cin>>m;
int j;
for(j=;j<m;j++)
{
cin>>zhiling>>x>>y;
if(zhiling==)
{
for(i=;i<=n;i++)
{
if(a.top()!=x)
{
temp=a.top();
a.pop();
b.push(temp);
}
else
{
save=a.top();
a.pop();
}
}
for(i=;i<=n-;i++)
{
if(b.top()!=y)
{
temp1=b.top();
b.pop();
a.push(temp1);
}
else
{
a.push(save);
temp1=b.top();
b.pop();
a.push(temp1);
}
}
}
if(zhiling==)
{
for(i=;i<=n;i++)
{
if(a.top()!=x)
{
temp=a.top();
a.pop();
b.push(temp);
}
else
{
save=a.top();
a.pop();
}
}
for(i=;i<=n-;i++)
{
if(b.top()!=y)
{
temp1=b.top();
b.pop();
a.push(temp1);
}
else
{
temp1=b.top();
b.pop();
a.push(temp1);
a.push(save);
}
}
}
}
int w[];
for(i=;i<n;i++)
{
w[i]=a.top();
a.pop();
}
for(i=n-;i>=;i--)
{
cout<<w[i]<<" ";
}
cout<<endl;
}
return ;
}

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

 #include<iostream>
using namespace std;
int main()
{
int t;
cin>>t;
for(int e=;e<t;e++){
int n;
cin>>n;
int a[];
int b[];
int count;
for(int o=;o<;o++)
a[o]=;
int zhiling,x,y,w;
for(int i=;i<=n;i++)
a[i]=i;
int m;
cin>>m;
for(int j=;j<m;j++)
{
cin>>zhiling>>x>>y;
if(zhiling==)
{
for(w=n+;w>=y+;w--)
{
a[w]=a[w-];
}
a[y]=x;
for(w=;w<=n+;w++)
{
if(a[w]==x&&a[w+]!=y)
{
a[w]=;
}
} }
if(zhiling==)
{
for(w=n+;w>=y+;w--)
{
a[w]=a[w-];
}
a[y+]=x;
for(w=;w<=n+;w++)
{
if(a[w]==x&&a[w-]!=y)
{
a[w]=;
}
} }
count=;
for(int c=;c<;c++)
{
if(a[c]!=)
{
b[count]=a[c];
count++;
}
}
for(int s=;s<=n;s++)
{
a[s]=b[s];
}
}
for(int k=;k<=n;k++)
{
cout<<a[k]<<" ";
}
cout<<endl;
}
return ;
}

【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. 【Codeforces 522A】Reposts

    [链接] 我是链接,点我呀:) [题意] 有人转载官方号的动态. 又有其他人转载其他人转载的动态. 问你最长的一条转载动态的链有多长. [题解] 用map把每个人的英文都转成小写的 然后从map中获取 ...

  2. Codeforces Round #404 (Div. 2)——ABCDE

    题目这里 A.map裸题 #include <bits/stdc++.h> using namespace std; map <string, int> p; string s ...

  3. [luoguP2870] [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold(后缀数组)

    传送门 数据小的话贪心就行. 可以把这个串翻转再接到后面,再求后缀数组,求出 rank 数组就很简单了. ——代码 #include <cstdio> #include <iostr ...

  4. [bzoj1935][Shoi2007]Tree 园丁的烦恼 _树状数组

    Tree 园丁的烦恼 bzoj-1935 Shoi-2007 题目大意:给定平面上的$n$个点,$m$次查询矩形点个数. 注释:$1\le n,m\le 5\cdot 10^5$. 想法:静态二维数点 ...

  5. BZOJ——T 4563: [Haoi2016]放棋子

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 387  Solved: 247[Submit][Status][Discuss] Descriptio ...

  6. Hibernate注解开发教程

    目录 第一章 类级别注解 1-1 本章简介 一.Hibernate注解简介 二.JPA与Hibernate的关系 三.Hibernate注解的分类 1-2 准备工作 1-3 @Entity注解 1-4 ...

  7. request.getInputStream() 的两种解析方式

    http://sagewsg.iteye.com/blog/1717923 byte[] bytes = new byte[1024 * 1024]; InputStream is; try { is ...

  8. windows server使用 LetsEncrypt-Win-Simple来安装和使用用Let's Encrypt免费SSL证书

    一.网站部署 LetsEncrypt-Win-Simple可以自动发现已经部署的网站供我们选择要生成证书的网站,而且还需要进行验证.所以在生成证书之前,确保网站已经部署好并可以正常访问. 二.生成证书 ...

  9. Android实战简易教程-第四十一枪(显示倒计时的Button-适用于获取验证码)

    近期在做获取验证码的功能.考虑到优良的用户体验,决定制作一个拥有倒计时提示的Button按钮,在网上查了一些资料,非常是简单的就能实现.我写了一个小Demo,大家能够应用到自己的项目中. 一.代码 1 ...

  10. 【HDOJ 2255】奔小康赚大钱(KM算法)

    [HDOJ 2255]奔小康赚大钱(KM算法) 奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...