5022: 约瑟夫
Time Limit: 1 Sec Memory Limit: 128 MB
Description
Submit: 212 Solved: 105
[Submit][Status][Web Board]Input
在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。他们该如何逃脱这场死亡游戏。
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.一行2个用空格隔开的整数n,m。
Output一行用空格隔开的整数,表示出圈编号。
Sample Input10 3
Sample Output3 6 9 2 7 1 8 5 10 4
蒟蒻用不来链表,呜呜呜~
#include#define ll long long #define ve vector #define mp map #define NO cout<<"NO"< =a;i--) #define mem(a,b) memset(a,b,sizeof(a)) #define st string #define N 10005 #define eps 1e-13 using namespace std; const double pi =acos(-1.0); const int maxn=1e6+5; const ll mod =1e15; const int dx[]={-1,0,1,0}; const int dy[]={0,1,0,-1}; //set s; ve v; priority_queue , greater >q; int lcm(int a,int b){ return a*b/__gcd(a,b); } bool isleaf(int x){ return x%400==0||(x%4==0&&x%100==0); } int primes[N], cnt; bool vis[N]; void is_prime(int x){ vis[1] = vis[0] = 1; for(int i = 2; i <= x; ++ i){ if(!vis[i])primes[cnt ++ ] = i; for(int j = 0; primes[j] * i <= x; ++ j){ vis[primes[j] * i] = true; if(i % primes[j] == 0)break; } } }//1e6; ll qpow(ll a,ll n)//快速幂 ll mod=1e15; { ll re=1; while(n) { if(n&1) re=(re*a)%mod; n>>=1; a=(a*a)%mod; } return re; } inline ll qmul(ll x,ll y,ll p)//快速乘 { ll z=(long double)x/p*y; ll res=(unsigned long long)x*y-(unsigned long long)z*p; return (res+p)%p; } void pprint(char *); struct ob { char MC[100]; double DJ; int SL; }; int sum[maxn]; void iprime(){ mem(sum,1); pre(i,2,maxn/2) for(int j=i*2;j >n>>m; pre(i,0,n-1)next[i]=i+1;//初始化数组 next[n]=1;//第n个指向1,形成闭环 pre(i,1,n){ pre(j,1,m-1) pp=next[pp];//指针不断向下 cout<



