4 条题解
-
0
#include<bits/stdc++.h> using namespace std; int n,m,p[10086],cntd,cnt=1; int main(){ cin>>n>>m; cntd=n; for(int i=1;i<=n;i++){ p[i]=i; }//编号 p[n+1]=-2;//碰到-2就重新从1开始数 for(int i=1;cntd>1;i++){ if(p[i]==-2){ i=0; continue; } if(p[i]==-1)continue;//被淘汰的跳过 if(cnt%m==0){ p[i]=-1; cntd--;//人数 }//淘汰 cnt++; } for(int i=1;i<=n;i++){ if(p[i]>0)cout<<p[i]; } return 0; }
-
0
这题本人有数学解法(不是模拟,太麻烦了,而且时间复杂度O(nm),数据大点就超时)
其实还有一个时间复杂度O(m)的解法,但还是不够快
ACcode(最快code)
(复杂度本人也不会算)
#include<bits/stdc++.h> using namespace std; const int N=1e4+5,INF=0x3f3f3f3f; typedef long long LL; LL ceil(LL x,LL y){ return x/y+(x%y!=0); } LL j(LL n,LL q){ LL d=1,end=(q-1)*n; while(d<=end)d = ceil(q*d,q-1); return q*n+1-d; } LL n,q; int main() { cin>>n>>q; cout<<j(n,q); return 0; }
有人能帮我算一下吗?(算出来私聊我)
-
-2
太简单了
#include <iostream> using namespace std; bool a[1005]; int main() { int n,m,cnt=0,i=0,p=0; cin >> n >> m; while(i=i%n+1){ // cout << a[i] << " " << i << " " << cnt << " " << p << endl; if(cnt==n-1){ break; } if(a[i]==false){ p++; } if(p==m){ p=0; a[i]=true; cnt++; } } for(int i = 1; i <= n; i++){ if(a[i]==false){ cout << i; return 0; } } }
- 1
信息
- ID
- 1028
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 7
- 标签
- 递交数
- 277
- 已通过
- 74
- 上传者