题意: 给出约瑟夫环的n和k,求最后的三个人。
此题为ACM中不区分递推和dp的典例- -!
/* **********************************************
Author : Nero
Created Time: 2013-8-26 0:36:33
Problem id : LA 4727
Problem Name: Jump
*********************************************** */
/*
数学方法快速求Joseph的末三位。。。
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define REP(i,a,b) for(int i=(a); i<(int)(b); i++)
#define clr(a,b) memset(a,b,sizeof(a))
int n,k;
int main() {
int cas;
scanf("%d", &cas);
while(cas--) {
scanf("%d%d", &n, &k);
int s;
s = (k-1) % 3;
for(int i = 4; i <= n; i ++) s = (s + k) % i;
printf("%d ", s+1);
s = (k-1) % 2;
for(int i = 3; i <= n; i ++) s = (s + k) % i;
printf("%d ", s+1);
s = 0;
for(int i = 2; i <= n; i ++) s = (s + k) % i;
printf("%d\n", s+1);
}
return 0;
}