首页 > 代码库 > POJ 1012 Joseph(打表题)
POJ 1012 Joseph(打表题)
题意:约瑟夫环的变形,要求寻找到一个杀人循环节m使后半节的坏人先被全部杀光。
直接链表模拟出结果,再打表就行;
代码:(注释的是打表码)
#include<iostream> #include<cstdio> #include<cmath> #include<map> #include<queue> #include<string> #include<cstring> #include<algorithm> using namespace std; /* int l[30],r[30]; int main() { int k=1; //while(~scanf("%d",&k)&&k) for(k=1;k<14;k++) { k*=2;int ans=0; for(int i=1;1;i++) { memset(r,0,sizeof r); memset(l,0,sizeof l); for(int j=1;j<=k;j++) r[j]=j+1,l[j]=j-1; r[k]=1;l[0]=k; int dead=0,flag=1; for(int num=1,x=1;dead!=k/2;x=r[x],num++) { if(num!=i) if((i-num)/(k-dead)&&(i-num)%(k-dead)>0)num+=(i-num)/(k-dead)*(k-dead); else ; else if(x>k/2)num=0,l[r[x]]=l[x],r[l[x]]=r[x],dead++; else {flag=0;break;} } if(flag){ans=i;break;} } printf("%d,",ans); k/=2; } return 0; } */ int da[]={2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881}; int main() { int n; while(~scanf("%d",&n)&&n) { printf("%d\n",da[n-1]); } return 0; }
POJ 1012 Joseph(打表题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。