UVA 1452 Jump 約瑟夫環變式

2021-09-01 12:25:51 字數 863 閱讀 6318

題目大意:

給出n,m,約瑟夫環共n項,每數到m殺乙個人,問剩下的倒數第3個人、倒數第2個人、倒數第1個人的編號分別是多少

題解:

因為我們都知道求約瑟夫環問題是f[1]=0, f[n]=(f[n-1]+k)%i ,所以一開始我的想法是就用同樣的方法來推倒數第2個人,

f[2]=0,f[n]=(f[n-1]+k)%i ;但是得出的結果卻不對,

在倒數第2局標號為1的不一定在本局出局,在m=2的情況下是這樣,被樣例誤導了........

但是倒數第2局一定是只有編號為0和1的兩個人,所以我們可以求出倒數第1個人在倒數第2局的標號,然後1-這個編號倒數第2個人在倒數第2局的編號,有了起始編號之後剩下的就是按照那個公式推了( f[n]=(f[n-1]+k)%i)

同理,倒數第3個人在倒數第3局的編號,然後順著退就ok了。於是我們可以求出倒數第1個和倒數第2個人在倒數第3局的編號,它們和倒數第3個人的編號一定分別是0,1,2,所以ans3=(0^1^2)^ans1^ans2;

#include#include#include#include#include#define max_n 10010

typedef long long ll;

using namespace std;

int main()

ans2=(ans2+k)%i;

if(i==3)

ans3=(ans3+k)%i;

}printf("%d %d %d\n",ans3+1,ans2+1,ans1+1);

}return 0;

}

uva 1452 dp 約瑟夫環

uva 1452 jump 約瑟夫環。對於乙個n個人,沒k個踢出去的約瑟夫環。踢出乙個人後,環成了 0,1,2,k 2,k,k 1,n 對其從k為起點重新編號 n k 1,n k 2,n 1,0,1,2,n k 這樣變成了乙個 n 1,k 的約瑟夫環問題。於是得到轉移方程 dp i dp i 1 k...

UVALive 4727 Jump 約瑟夫環

題目大意 給出乙個約瑟夫環,從1開始到n,現給出乙個k,數到k表示要退出,現在要你求輸出最後面的三個數 這裡講一下如果求最後的三個數如何求,由遞迴公式得,首先要初始化f i 然後再由f i 往上遞迴到f n 得到的這個f n 表示的其實是倒數第i個數的值 也就是說如果要求倒數第乙個數的值,就要初始化...

UVA133 約瑟夫環變種

為了縮短領救濟品的隊伍,nnglrp決定了以下策略 每天所有來申請救濟品的人會被放在乙個大圓圈,面朝裡面。選定乙個人為編號 1 號,其他的就從那個人開始逆時針開始編號直到 n。乙個 一開始逆時針數,數 k 個申請者,然後另乙個 第 n 個始順時針方向數 m 個申請者,這兩個人就被送去再教育。如果兩個...