51nod 1074 約瑟夫環V2

2021-07-15 20:02:17 字數 969 閱讀 2051

1074 約瑟夫環 v2

基準時間限制:1 秒 空間限制:131072 kb 分值: 160 

難度:6級演算法題

n個人坐成乙個圓環(編號為1 - n),從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。

例如:n = 3,k = 2。2號先出列,然後是1號,最後剩下的是3號。

input

2個數n和k,表示n個人,數到k出列。(2 <= n <= 10^18, 2 <= k <= 1000)
output

最後剩下的人的編號
input示例

3 2
output示例

3
用函式影象做的

然後必須讓kx+b

就讓kx+b=新的b  然後變成kx1+b=b  b+nk>=x+n 

#include#include#include#includeusing namespace std;

//long long f[3000];

int main()

{ unsigned long long i,j,n,k;

cin>>n>>k;

//f[1]=0;i=2;

f[1]=0;

// for(i=2;i<=n;i++) f[i]=(f[i-1]+k)%i;

long long y=k%2;

long long x=2,t=0;

long long z1,z2;

z1=y;

z2=x;

while(x<=n)

{z1=y;

z2=x;

t=(x-y)/(k-1);

if(t==0) t++;

y=y+t*k-((y+t*k)/(x+t))*(x+t);

x+=t;

//cout<

51nod 1074 約瑟夫環 V2

1074 約瑟夫環 v2 基準時間限制 1 秒 空間限制 131072 kb 分值 160 難度 6級演算法題 n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。inp...

51Nod1074 約瑟夫環 V2

n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。input 2個數n和k,表示n個人,數到k出列。2 n 10 18,2 k 1000 output 最後剩下的人的編...

題解 51nod1074 約瑟夫環V2

原題傳送門 具體數學上看的一愣一愣的,自己瞎想了想好像明白了 假設現在有n nn個人,先是淘汰第k kk個人,剩下 n 1 n 1 n 1 個人是這樣排列的 k 1 k 2 n,1 2,k 2,k 1 k 1,k 2,n,1,2,k 2,k 1 k 1,k 2,n,1,2,k 2,k 1若是我們知道...