poj 3517
題目鏈接 ?http://poj.org/problem?id=3517
題意 ? ? ? ?約瑟夫環(huán) ?要求最后刪掉的那個人是誰;
方法 ? ? ? ?理解遞推公式就行了 ?考慮這樣一組數(shù)據(jù) ?k = 3 是
? ? ? 長度為 N 的約瑟夫環(huán) ? ? ? ?k,k+1,k+2,k+3,k+4,k+5,k-2, k-1
? ? ? 長度為N-1的約瑟夫環(huán) ? ? 0, ?1, ? 2, ? ? 3, ? ? 4, ? 5, ?n-2, n-1
? ? ? 則 f[n] = (f[n-1]+k)%N;
可以將第一步 預(yù)處理出來; 然后 套公式就行了;
#include<iostream> #include<stdio.h> #include<cstring> #include<algorithm> using namespace std;int arr[10004],cnt[10004],f[10004]; int main( ) {int N,M,K;while( scanf("%d%d%d",&N,&K,&M) != EOF ){if( !N )break;for( int i = 1; i <= N; i++ )arr[i] = i;while( M > N ) M -= N; arr[M] = -1; int k = 0;for( int i = 1; i <= N; i++ )if( arr[i] == -1 ){for( int j =i+1; j <= N; j++ )cnt[k++] = arr[j];i = N+1;}for( int i = 1; i <= N; i++ )if( arr[i] != -1 )cnt[k++] = arr[i];else break;f[0] = 0;for( int i = 1; i < k; i++ )f[i] = (f[i-1]+K)%(i+1);cout<<cnt[f[k-1]]<<endl;}return 0; } View Code?
? ? ? ? ??
轉(zhuǎn)載于:https://www.cnblogs.com/wulangzhou/p/3428896.html
總結(jié)
- 上一篇: 搞定ubuntu下环境变量的配置
- 下一篇: [BootStrap] 富编辑器,基于w