大学生程序代写

http://acm.nyist.net/JudgeOnline/problem.php?pid=511

这道题很容易想到要构建一个循环链表来确定每个球的相对位置,就是操作比较繁琐,考虑情况较多。

首先要创建节点Node,每个节点都有一个初始顺序order,指向左边的Node*指针left,何指向右边的Node*指针right。

  1. struct Node
  2. {
  3. int order;
  4. Node *left,*right;
  5. }node[N];

然后给每个小球附上顺序,并建立和左右的联系。

  1. void build(int n)
  2. {
  3. int i,order=1;
  4. for(i=1;i<n;i++)
  5. {
  6. node[i].order=i;
  7. node[i].right=&node[i+1];
  8. node[i+1].left=&node[i];
  9. }
  10. node[1].left=&node[n];
  11. node[n].right=&node[1];
  12. node[n].order=n;
  13. }  
     

    然后就是A、B操作,下边叙述一下A操作(将x放在y左边)的实现方法:

1.将x左边节点的right指针指向x的右边节点

2.将x右边节点的left指针指向x的左边节点

3.将x的right指向y节点

4.将x的left指向y左边的节点

5.将y左边节点的right指向x节点

6.将y的left指向x节点

实现代码:

  1. void A(int x,int y)
  2. {
  3. Node *p=&node[x],*q=&node[y];
  4. p->left->right=p->right;
  5. p->right->left=p->left;
  6. p->left=q->left;
  7. p->right=q;
  8. q->left->right=p;
  9. q->left=p;
  10. }  
     

    由于交换位置仅改变节点的左右指针,并没有改变数组的下标(下标其实与order相同),所以查找球号时直接用下标索引。

同理可知操作B。

完整代码如下:

  1. #include<stdio.h>
  2. const int N=10005;
  3. struct Node
  4. {
  5. int order;
  6. Node *left,*right;
  7. }node[N];
  8. void build(int n)
  9. {
  10. int i,order=1;
  11. for(i=1;i<n;i++)
  12. {
  13. node[i].order=i;
  14. node[i].right=&node[i+1];
  15. node[i+1].left=&node[i];
  16. }
  17. node[1].left=&node[n];
  18. node[n].right=&node[1];
  19. node[n].order=n;
  20. }
  21. void A(int x,int y)
  22. {
  23. Node *p=&node[x],*q=&node[y];
  24. p->left->right=p->right;
  25. p->right->left=p->left;
  26. p->left=q->left;
  27. p->right=q;
  28. q->left->right=p;
  29. q->left=p;
  30. }
  31. void B(int x,int y)
  32. {
  33. Node *p=&node[x],*q=&node[y];
  34. p->left->right=p->right;
  35. p->right->left=p->left;
  36. p->right=q->right;
  37. q->right->left=p;
  38. p->left=q;
  39. q->right=p;
  40. }
  41. int main()
  42. {
  43. int ncase,n,m,i;
  44. char cmd;
  45. int x,y;
  46. scanf("%d",&ncase);
  47. while(ncase--)
  48. {
  49. scanf("%d%d",&n,&m);
  50. build(n);
  51. while(m--)
  52. {
  53. scanf("%*c%c%d%d",&cmd,&x,&y);
  54. switch(cmd)
  55. {
  56. case 'A':
  57. A(x,y);break;
  58. case 'B':
  59. B(x,y);break;
  60. case 'Q':
  61. printf("%d\n",x?node[y].right->order:node[y].left->order);break;
  62. }
  63. }
  64. }
  65. return 0;
  66. }

其实此题还可以不用链表,对比了一下,时间相差不大,相比而言非链表法更不容易出错。

思路基本一样,直接给出代码:

  1. #include<cstdio>
  2. const int N=10005;
  3. struct xyz
  4. {
  5. int prv,nxt;
  6. }a[N];
  7. void build(int n)
  8. {
  9. int i;
  10. for(i=1;i<=n;i++)
  11. {
  12. a[i].prv=i-1;
  13. a[i].nxt=i+1;
  14. }
  15. a[1].prv=n;
  16. a[n].nxt=1;
  17. }
  18. void A(int x,int y)
  19. {
  20. a[a[x].prv].nxt=a[x].nxt;
  21. a[a[x].nxt].prv=a[x].prv;
  22. a[x].nxt=y;
  23. a[x].prv=a[y].prv;
  24. a[a[y].prv].nxt=x;
  25. a[y].prv=x;
  26. }
  27. void B(int x,int y)
  28. {
  29. a[a[x].prv].nxt=a[x].nxt;
  30. a[a[x].nxt].prv=a[x].prv;
  31. a[x].nxt=a[y].nxt;
  32. a[x].prv=y;
  33. a[a[y].nxt].prv=x;
  34. a[y].nxt=x;
  35. }
  36. int main()
  37. {
  38. int ncase,n,m,i;
  39. char cmd;
  40. int x,y;
  41. scanf("%d",&ncase);
  42. while(ncase--)
  43. {
  44. scanf("%d%d",&n,&m);
  45. build(n);
  46. while(m--)
  47. {
  48. scanf("%*c%c%d%d",&cmd,&x,&y);
  49. switch(cmd)
  50. {
  51. case 'A':
  52. A(x,y);break;
  53. case 'B':
  54. B(x,y);break;
  55. case 'Q':
  56. printf("%d\n",x?a[y].nxt:a[y].prv);break;
  57. }
  58. }
  59. }
  60. return 0;
  61. }
作者:chao1983210400 发表于2013-7-23 23:52:07 原文链接
阅读:12 评论:0 查看评论

[转]NYOJ-511-移动小球的更多相关文章

  1. leetcode排列,求第k个排列

    stl 中的下一个排列在写一遍忘了 写个1个多小时,使用递归写的,错误就在我使用一个list保存当前剩下的数,然后利用k/(n-1)!的阶乘就是删除的数字,但进过观察, 比如 list={1,2,3} ...

  2. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  3. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

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

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

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

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

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

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

  7. HTML5 随机弹跳的小球

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

  8. NYOJ 333

    http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...

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

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

随机推荐

  1. socket()模块和套接字对象的内建方法

    一.socket()模块函数 要使用socket.socket()函数来创建套接字,其语法如下: socket(socket_family,socket_type,protocol=0) 如上所述,s ...

  2. jQuery:自学笔记(3)——操作DOM

    jQuery:自学笔记(3)——操作DOM 修改元素的属性 获取元素属性 设置元素属性 修改元素的内容 说明 有三种方式可以获取HTML元素的内容,分别是 ☐ text():设置或返回所选元素的文本内 ...

  3. substring splice

    返回start到end之前 不包括end stringObject.substring(start,end) (不接受负数) stringObject.slice(start,end) start起始 ...

  4. 用requests登录微信网页版,并接收发送消息

    首先,网页版微信登录大致分为以下几个流程(都是大家可以通过抓包得到): 1.登陆主页后,会生成一个UUID,这是个用户标识,在后面请求二维码会用到 def get_uuid(self): '''获取u ...

  5. windows10 搜索桌面搜索功能失效的解决

    windows桌面的搜索框用起来很方便,很多时候直接把不常用的程序的快捷方式删掉,直接从搜索框搜索就可以,但是这两天突然不能用了,今天晚上找了一下原因,终于弄好了. 参考知乎上面的陈滔滔的方法: ht ...

  6. MySQLdump导出sql脚本

    1.问题描述 通过图形化工具,在查询窗口用select语句按条件查询出所需结果,然后用“导出向导”把查询结果导成sql文件,但是导出来的sql语句不全,没有表名.字段名. 通过图形化工具,试了好多次都 ...

  7. linux与windows 通过SecureCRT进行文件传输方式

    linux与windows 通过SecureCRT进行文件传输方式 方式一:lrzsz是一款在Linux里可代替ftp上传和下载的程序.(小文件推荐,以4G为界限) # rz -bash: rz: c ...

  8. iOS Font

    1. 非常棒的查看字体样貌网站: http://iosfonts.com 1. 查看设备支持字体: NSArray *familyNames = [NSMutableArray arrayWithAr ...

  9. POJ 1635 Subway tree systems (树的最小表示法)

    题意:一串01序列,从一个点开始,0表示去下一个点,1表示回到上一个点,最后回到起点,遍历这棵树时每条边当且仅当走2次(来回) 给出两串序列,判断是否是同一棵树的不同遍历方式 题解:我们把每一个节点下 ...

  10. java项目 里的DAO,model,service, IMPL含义

    在一般工程中 基本上都会出现上述的字眼首先 DAO 提供了应用程序与数据库之间的操作规范 和操作 用于通常数据库的增删查改 一般如果使用框架 都是由框架自动生成,提高访问效率和便于快速开发.hiber ...