博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 133 - The Dole Queue 数据结构专题
阅读量:4074 次
发布时间:2019-05-25

本文共 982 字,大约阅读时间需要 3 分钟。

 

FILE 8487
43.29%
3712
题目链接:

题目类型: 数据结构, 链表

题意: N份申请书,排成一个圆圈, 按逆时针方向编号为1~N。 有两个公务员,公务员1站在1,往逆时针方向数到第k份,选中;公务员2站在N,往顺时针方向数到第m份,选中。 取走选中的编号的申请书,输出编号。如果编号一样,则只输出一个数。 直到所有申请书都拿光。

解体思路:  用循环链表模拟,取走的编号从链表中删除。这一题最难的地方在于两个人删除之后,他们的新位置的判断和选择,因为第一个人的新位置可能时第二个人要删除的位置,同理,第二个人的新位置也可能时第一个人要删除的位置。 最后, 循环结束的判断。 这些在代码里会有详细的注释

输入:

10 4 30 0 0

输出:

tex2html_wrap_inline34 4 tex2html_wrap_inline34 8, tex2html_wrap_inline34 9 tex2html_wrap_inline34 5, tex2html_wrap_inline34 3 tex2html_wrap_inline34 1, tex2html_wrap_inline34 2 tex2html_wrap_inline34 6, tex2html_wrap_inline50 10, tex2html_wrap_inline34 7

where tex2html_wrap_inline50 represents a space.

#include
#include
int prev[25];int next[25];int N, pos1, pos2,m,n;// 删除节点void remove(int n){ next[prev[n]] = next[n]; prev[next[n]] = prev[n];}void init(){ memset(prev,0,sizeof(prev)); memset(next,0,sizeof(next)); for(int i=1; i<=N;i++){ prev[i]=i-1; next[i]=i+1; } prev[1]=N; next[N]=1; pos1=1; pos2=N;}void solve(){ while(1){ if(prev[pos2]==pos2 || next[pos1]==pos1 ){ printf("%3d\n",pos1); break; } // 第一个人进行移动 int stepNum=1; while(stepNum++
——      生命的意义,在于赋予它意义。 
                   原创 
 , By   D_Double

转载地址:http://puzni.baihongyu.com/

你可能感兴趣的文章
如何使用Flex 4新的CSS语法,兼容halo组件
查看>>
flex addChild 的一个小细节
查看>>
Future模式,探讨mina中的Iofuture
查看>>
Java动态数组
查看>>
人生时间表. 如果您有了时间
查看>>
Adobe Flash gets its full launch on Android
查看>>
java.nio.BufferOverflowException
查看>>
对于大型公司项目平台选择j2ee的几层认识(二)
查看>>
flash player10 Vector类型
查看>>
德克萨斯扑克初级玩家必胜玩法
查看>>
Flex数据绑定陷阱:常见的误用和错误(一) - 闪吧教材.jpg
查看>>
讲讲volatile的作用
查看>>
游戏开发者的AS3数据结构 COOL!
查看>>
论手机游戏开发
查看>>
Spark Label 可以显示多行,但 MX Label 不可以。
查看>>
论策略网游画面细节
查看>>
今天在使用flash.text.TextField时想不出I样的鼠标键头
查看>>
【老孙随笔】项目经理的误区(一)成功误区
查看>>
在一个Flex Container中添加Sprite 对象
查看>>
回去研究一下rawChild
查看>>