北航的一个ACM题目----约瑟夫,求快速的解法!!!

oyzdz1988 2009-08-13 09:22:02
约瑟夫
时间限制:1000 ms 内存限制:65536 KB

描述
我们都知道joseph问题,n个人围成一圈以m报数,报m的人被杀死,余下来的人接着从1报数,直到剩最后一人。

现在我们已知有k个好人,k个坏人,(1<=k<=14)围成一圈报数,前k个为好人,后k个为坏人,求最小的m使得所有的坏人先被杀死(保证不死一个好人的情况)



输入
多组测试数据,以0结束

输出
每组数据对应一个输出结果,每个结果一行

样例输入
3
4
0

样例输出
5
30


我老是超时,最后是一个个的求出来,建了个表AC的,前13个很快,但k=14时,花时间较多~
请问这个题目有直接解出的算法吗?
...全文
253 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzheqin 2010-01-07
  • 打赏
  • 举报
回复
参考Concrete mathematics第一章的习题。
绿色夹克衫 2009-11-25
  • 打赏
  • 举报
回复
不好意思,我也把问题想简单了,虽然可以通过模方程来求解,但符合条件的模方程的数量也不少呢,
也是指数级的。

如果只是任意求1个解的话,可以通过GCD,求出k+1,k+2....2*k的最小公倍数,这就是一个合格的解。
但最小解似乎没有太多的规律。

不过这个最小解M mod (K + 1) 一定等于0或1,在枚举m的时候,可以从这个条件开始构造,提高一些效率。

M mod (k+1) + M mod (k+2) + ..... M mod 2k = 0;(当余数 > 除数的一半时,取负值)
绿色夹克衫 2009-11-24
  • 打赏
  • 举报
回复
用模逆应该可以求,LZ看看中国剩余定理吧!
bigc2000 2009-08-13
  • 打赏
  • 举报
回复
错了,我说错了,
不好意思,这个是ACM题,sorry,很难的,而且可能不存在这样的M,N
bigc2000 2009-08-13
  • 打赏
  • 举报
回复
链表,O(n),时间足够
oyzdz1988 2009-08-13
  • 打赏
  • 举报
回复
不是那个公式能解决的~

[Quote=引用 2 楼 joanlynnlove 的回复:]
Google。
两个关键字:约瑟夫环  公式
Ok。
[/Quote]
acdbxzyw 2009-08-13
  • 打赏
  • 举报
回复
Google。
两个关键字:约瑟夫环 公式
Ok。
jhkwei 2009-08-13
  • 打赏
  • 举报
回复
你去看看,具体数学,上面专门有讲

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧