2 条题解
-
0
60分超时:
#include<bits/stdc++.h> using namespace std; bool v[110000]; int main() { int n,m;scanf("%d%d",&n,&m); memset(v,0,sizeof(v)); int t=n,i=1,mi=0; while(t>1) { if(v[i]==0) { mi++; if(mi==m){mi=0;v[i]=1;t--;m=i;} } i=i%n+1; } for(int i=1;i<=n;i++)if(v[i]==0){printf("%d\n",i); break;} return 0; }80分代码(链表实现):
#include<bits/stdc++.h> using namespace std; struct node{int pre,next;}a[110000]; int main() { int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { a[i].pre =i-1; a[i].next=i+1; } a[1].pre=n;a[n].next=1; int p=1; while(n>1) { for(int i=2;i<=m;i++)p=a[p].next; m=p; int pre=a[p].pre; int next=a[p].next; a[pre].next=next; a[next].pre=pre; p=next; n--; } printf("%d",p); return 0; }100分代码(链表实现+一点小优化):
#include<bits/stdc++.h> using namespace std; struct node{int pre,next;}a[110000]; int main() { int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { a[i].pre =i-1; a[i].next=i+1; } a[1].pre=n;a[n].next=1; int p=1; while(n>1) { if(m<n/2)for(int i=2;i<=m;i++) p=a[p].next; else for(int i=1;i<=n-m+1;i++)p=a[p].pre; n--;m=p%n;if(m==0)m=n; int pre=a[p].pre; int next=a[p].next; a[pre].next=next; a[next].pre=pre; p=next; } printf("%d\n",p); return 0; } -
0
60分超时:
#include<bits/stdc++.h> using namespace std; bool v[110000]; int main() { int n,m;scanf("%d%d",&n,&m); memset(v,0,sizeof(v)); int t=n,i=1,mi=0; while(t>1) { if(v[i]0) { mi++; if(mim){mi=0;v[i]=1;t--;m=i;} } i=i%n+1; } for(int i=1;i<=n;i++)if(v[i]==0){printf("%d\n",i); break;} return 0; }
80分代码(链表实现):
#include<bits/stdc++.h> using namespace std; struct node{int pre,next;}a[110000]; int main() { int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { a[i].pre =i-1; a[i].next=i+1; } a[1].pre=n;a[n].next=1; int p=1; while(n>1) { for(int i=2;i<=m;i++)p=a[p].next; m=p; int pre=a[p].pre; int next=a[p].next; a[pre].next=next; a[next].pre=pre; p=next; n--; } printf("%d",p); return 0; }
100分代码(链表实现+一点小优化):#include<bits/stdc++.h> using namespace std; struct node{int pre,next;}a[110000]; int main() { int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { a[i].pre =i-1; a[i].next=i+1; } a[1].pre=n;a[n].next=1; int p=1; while(n>1) { if(m<n/2)for(int i=2;i<=m;i++) p=a[p].next; else for(int i=1;i<=n-m+1;i++)p=a[p].pre; //printf("%d ",p); n--; m=p%n;if(m==0)m=n; int pre=a[p].pre; int next=a[p].next; a[pre].next=next; a[next].pre=pre; p=next; } printf("%d\n",p); return 0; }
- 1
信息
- ID
- 853
- 时间
- 5000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 93
- 已通过
- 28
- 上传者