【题解】P1996 约瑟夫问题

题面

题目传送门

前言

无话可说,这是云落梦开始的地方

勾起了些许回忆呢~

正文

可以说是一题多解,并且是百做不厌的好题兼典题

链表是相当好做的

当然,递归直接做也是可以的,毕竟一题多解嘛

其实算法思路不是很想多说

毕竟每次一个人出局,和删除一个节点是完全等效的

所以直接把约瑟夫问题抽象成一个循环链表即可……

干讲也不是个事,自行结合代码块理解吧,权且当是阅读程序题了

代码

#include<iostream> 
using namespace std;
const int maxn=1024;
struct node{
	int data,pre,nxt;
}lst[maxn];
inline void del(int pos){
	lst[lst[pos].pre].nxt=lst[pos].nxt;
	lst[lst[pos].nxt].pre=lst[pos].pre;
	return;
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		lst[i].data=i+1;
		if(i==0){
			lst[i].pre=n-1;
		}else{
			lst[i].pre=i-1;
		}
		if(i==n-1){
			lst[i].nxt=0;
		}else{
			lst[i].nxt=i+1;
		}
	}
	int cur=0;
	for(int i=0;i<n-1;i++){
		for(int j=0;j<m-1;j++){
			cur=lst[cur].nxt;
		}
		cout<<lst[cur].data<<' ';
		del(cur);
		cur=lst[cur].nxt;
	}
	cout<<lst[cur].data<<endl;
	return 0;
}

后记

不知不觉中

OI 打了快三年了

成绩不咋理想

但是也理想不了

少年不识愁滋味,爱上层楼。爱上层楼,为赋新词强说愁。

只能说那时没有觉得这是一门学科,更别提竞赛……

所谓玩性一发不可收拾,说的就是云落本人吧……

而今识尽愁滋味,欲说还休。欲说还休,却道天凉好个秋。

也是喜欢上了 OI,迷上了 OI

我热爱着打 OI 的每一天

不是刻意地爱着,而是如同喝水吃饭一般

在我炽热的心中淌过

或许我患上了妄想症

妄想着一天 \(24\) 小时沉浸式的敲代码

可惜——

岁月不待人

我不知道还有多久

就要和代码说再见了

但那个日子

已经进入了倒计时

我只能做的

仅有珍惜

就让我留下的这些“垃圾”

向未来的自己证明

我打过 OI,爱过 OI

完结撒花!

posted @ 2024-12-12 23:18  sunxuhetai  阅读(58)  评论(0)    收藏  举报