jdoj 1930 慈善的约瑟夫 递推 数学做法

来源:互联网 发布:美工 英文 编辑:程序博客网 时间:2024/05/01 23:47

慈善的约瑟夫

你一定听说过链表型约瑟夫问题,即从n人中找出唯一的幸存者。现在你将玩一个皆大欢喜的游戏。假设n个人站成一圈,从第1人开始交替的去掉游戏者,但只是暂时去掉(例如,首先去掉2),直到最后剩下唯一的幸存者为止。幸存者选出后,所有比幸存者号码高的人每人将得到1TK(一种货币),永久性的离开。其余剩下的人将重复以上的过程,比幸存者号码高的人每人将得到1TK后离开。一旦经过这样的过程后,人数不再减少,最后剩下的那些人将得到2TK。请你计算一下约瑟夫一共要付出多少钱。

我们在这里暂时不讲什么双向链表
只讲数学做法 (递推做法)

首先每个人都会得到1tk 只有最后幸存的人多得了1Tk
所以问题的子问题即为还剩下几个人
所以建立数组 final[M] 表示M次报数后还剩下final[M]个人
显然当 final[M]==M的时候 人数就不会再减少了
此时问题的解为final[M]+N
那么,如何求final[m]呢?
if
final[i]==i时,人数就不会再减少了,此时的i即为m;
else
我们就需要对剩下的final[i]个人再进行报数出列操作。

我们令joes[I]表示第i次报数的幸存者的编号
,也就代表了小于等于jose[I]的都可以多的1TK
设报到k的人需要出去
则jose[i-1]可以理解为第一轮第一次报数,k出去后的状态。
k出去后会从k+1继续报数,此时圈中有i-1个人,
从k+1开始报数,编号如下
jose[i]:k+1,k+2,……, i , 1,2,……,k-1
我们可以人为地把这个圈逆时针转k个单位,此时的编号如下
jose[i-1]:1, 2, ……, i-k , i-k+1,i-k+2,……,i-1
观察这两个序列
我们人为的整理得到了下面的公式
jose[i]:=(jose[i-1]+1) mod i + 1
这就是递推
边界也很明显,jose[1]=1
我们就可以推出每一个的jose[i] 和 final[i]
可以得到以下的公式
if(jose[i]==final[i])
final[i]=i;
else
final[i]=final[jose[i]];

下面是代码(巨短)

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;#define N 40000+5int jose[N],final[N];int n;int main(){       cin>>n;    jose[1]=final[1]=1;    for(int i=2;i<=32767;++i)    {        jose[i]=(jose[i-1]+1)%i+1;        if(jose[i]==i)              final[i]=i;        else            final[i]=final[jose[i]];    }    cout<<final[n]+n;}
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 客户交给我的钱被骗了怎么办 要证明网络来源的可靠性该怎么办 魅族手机高德地图信号弱怎么办 t恤的印花粘粘的怎么办 从包图网下载的模板素材丢失怎么办 大屏导航的语音功能怎么办用 手机导航不走地图上面走时怎么办 行车撞到步行人死亡师机逃离怎么办 小天才平板电脑不显示了怎么办 高德地图导航不显示车速怎么办 桥梁梁片强度达不到设计要求怎么办 新车交车检验表客户没签字怎么办 中铁快运职工拒绝提货要怎么办 奇瑞a3暖风水箱爆了怎么办 别人挖鱼塘占了我的山土怎么办 自己的鱼塘让别人强行占住了怎么办 公路扩路占地占了鱼塘怎么办? 玉米皮编垫子编好后玉米绳怎么办 入户门门框未预留纱窗位怎么办 门和墙有2cm缝隙怎么办 支座预埋钢板忘记埋了怎么办 做完线雕一边紧一边松怎么办 卖家把没发货的填写了单号怎么办 买的人民币白银亏了好多钱怎么办 带控制线的三相四线开关怎么办 覆膜除尘布袋风拉不动怎么办 家里装修把暖气管道打破了怎么办 冷水管与热水管接错了怎么办 磨砂皮的鞋子打湿变硬了怎么办 等离子淡化热处理层渗不够厚怎么办 寄快递快递公司把东西弄坏了怎么办 寄美国的快递客人拒绝清关怎么办 国际e邮宝几天没物流信息了怎么办 石家庄小学网上报名填错了怎么办 去医院看病不知道挂什么科怎么办 深水井深水泵埋了2米怎么办 请问我捡的手机不是我的指纹怎么办 宝宝把塑料子弹塞到了鼻子里怎么办 坐便池上面的小孔不出水怎么办 还没离职已经找好工作怎么办 因火车晚点而耽误下趟火车怎么办