原题链接
本人直接使用了约瑟夫问题的思路解这题,用数组模拟链表:
#include<iostream>
using namespace std;
int p[70000];//表示每一个人后面
bool f[70000];//表示是(1)否(0)处死
int n,m;
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<2*n;i++)p[i]=i+1;
p[2*n]=1;//构造链表
int now=1;
for(int i=1;i<=n;i++){//n次处死
for(int j=1;j<m;j++)
now=p[now];//往下数
f[now]=1;//标记处死
p[now]=p[p[now]];//更新下一个
}
for(int i=1;i<=2*n;i++){
cout<<(f[i]?'B':'G');//要处死的放坏人,不要的放好人
if((i%50)==0)cout<<'\n';
}
return 0;
}
复杂度O(nm),因为 n,m<=32767 TLE了。
1.求思路
2.但是为什么这篇的就跑得很快?erase不是O(n)的复杂度吗?
谢谢!