UVA 1394 POJ 3517 And Then There Was One (双向循环链表和递推)
2014-05-11 20:23
381 查看
这题用双向循环链表的时间是O(NK),明显是过不了的,但是为了练练手,还是写了一下
然后用递推的方式又写了一个,把第一个M去掉,并且把所有的编号减去一个M,在最后再加回去
#include <cstdio> #include <algorithm> using namespace std; struct List { List* pre; int value; List* next; }; int main(){ int i,j; int n,k,m; while(scanf("%d %d %d",&n,&k,&m)){ List *list=new List; if(k==0 && m==0 && n==0) break; list->value=1; list->next=list; list->pre=list; List *start=list; for(i=2;i<=n;i++){ List *a=new List; a->value=i; a->pre=list->pre; a->next=list; list->pre->next= a; list->pre=a; if(i==m) start=a; } if(n>1){ start->pre->next=start->next; start->next->pre=start->pre; List *t=start->next; printf("%d\n",start->value); delete start; start=t; } else{ printf("%d\n",start->value); continue; } int s=n-1; while(s>1){ if(s==2){ printf("%d %d\n",start->value,start->next->value); } int temp=k-1; while(temp--){ start=start->next; } start->pre->next=start->next; start->next->pre=start->pre; List *t=start->next; printf("%d\n",start->value); delete start; start=t; s--; } printf("%d\n",start->value); } return 0; }
然后用递推的方式又写了一个,把第一个M去掉,并且把所有的编号减去一个M,在最后再加回去
#include <cstdio> #include <algorithm> using namespace std; int main(){ int i,j; int n,k,m; while(scanf("%d %d %d",&n,&k,&m)!=EOF){ if(n==0) break; int a[2]; a[0]=0; int v=0; for(i=2;i<=n-1;i++){ v=1-v; a[v]=(a[1-v]+k)%i; } printf("%d\n",(a[v]+m)%n+1); } }
相关文章推荐
- UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
- UVA 1394/POJ 3517 And Then There Was One
- POJ 3517 And Then There Was One (递推,约瑟夫问题变形)
- UVa:1394 And Then There Was One
- uva 1394 - And Then There Was One(约瑟夫环)
- UVa 1394 - And Then There Was One(约瑟夫数论)
- POJ 3517 And Then There Was One 约瑟夫环
- uva 1394 - And Then There Was One
- 【约瑟夫环变形】UVa 1394 - And Then There Was One
- POJ-3517-And Then There Was One
- UVA 1394 And Then There Was One
- UVA - 1394 And Then There Was One
- Poj 3517 And Then There Was One Joseph核心问题
- UVALive3882-And Then There Was One-约瑟夫问题-递推
- POJ 3517 And Then There Was One
- POJ 3517 And Then There Was One(约瑟夫环)
- poj 3517 And Then There Was One
- Poj 3517 And Then There Was One(约瑟夫环变形)
- POJ题目3517 And Then There Was One(约瑟夫,公式)
- UVa 1394: And Then There Was One