求助站外题圆桌问题
  • 板块学术版
  • 楼主Nicrobot
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/6/28 15:30
  • 上次更新2023/11/4 21:22:53
查看原帖
求助站外题圆桌问题
363317
Nicrobot楼主2021/6/28 15:30

原题链接

本人直接使用了约瑟夫问题的思路解这题,用数组模拟链表:

#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),O(nm),因为 n,m<=32767n,m<=32767 TLE了。

1.求思路

2.但是为什么这篇的就跑得很快?erase不是O(n)O(n)的复杂度吗?
谢谢!

2021/6/28 15:30
加载中...