约瑟夫环and同余方程组模板(exgcd求解同余方程组)

本文详细介绍了如何解决约瑟夫环变种问题,即给出约瑟夫环并已知每次出队的人编号,求解最小步长。通过分析首次出队情况和求解同余方程组,最终给出了解题代码和模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



http://acm.hdu.edu.cn/showproblem.php?pid=5668 

 题意:这题的意思是给你一个约瑟夫环,然后每个人按照k的步长出队,第ai个出队的人,编号为i,每个人的编号为1-n,让你求最小的步长,不存在就输出别的

题解:约瑟夫环变种问题,这次是告诉你出队的人,然后求步长了。

考虑第一次出队的情况:k=a1 (mod n)

n是第一次数人的时候圈的长度,a1的话是第一个出队的人的编号和前一个出队的人的编号之间间隔的还没被删除的人的个数,然后考虑编号是0到n-1,虽然约瑟夫环本质上,数到i的话应该是走了i+1步,但是这样可能会出现 k=n (mod n)的情况,所以只要求前一个出队和这次出队的之间的还没出队的人的个数,而不算上这次出队的这个人,这样的话这个k等于是k-1,然后求解完了之后再+1即可

贴一发代码:http://paste.ubuntu.net/15888159/


求解同余方程组的模板 x=b[i] (mod a[i])

模板:http://paste.ubuntu.net/15889426/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值