Josephus Problem II CSES - 2163

ops/2025/2/3 18:13:28/

有3种方法

Solution 1 - ordered_set

Utilizing the ordered_set

This data structure is an extension of the general set in C++.

It allows searching for the K-th smallest element in O(log n) time complexity.

#include <iostream> 
using namespace std; 
#include <ext/pb_ds/assoc_container.hpp> 
using namespace __gnu_pbds; 
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> 
int main() 
{ int n, k;cin >> n >> k;ordered_set os;for (int i = 1; i <= n; i++){os.insert(i);}int cur = 0;for (int i = 1; i <= n; i++){cur = (cur + k) % os.size();auto it = os.find_by_order(cur);cout << *it << " ";os.erase(it);}return 0; 
} 

Solution 2 Blocking Simulation

Assume N is the size of the list, we can divide the numbers into K × K K\times K K×K matrix, where K = N K=\sqrt{N } K=N

这样模拟的时候,做N次循环,循环内枚举为 s q r t N sqrt{N} sqrtN的常数倍,其中模拟复杂度为 O ( N N ) O(N\sqrt{N}) O(NN )

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
void solve()
{int n, k;cin >> n >> k;int m = sqrt(n);vector<vector<int>> g;for (int i = 1; i <= n;){vector<int> tmp;while (tmp.size() < m && i <= n){tmp.push_back(i++);}g.push_back(tmp);}int x = 0, y = 0;for (int i = 0; i < n; i++){int j = k % (n - i);while (j){if (y + j < g[x].size()){y += j;j = 0;}else{j -= g[x].size() - y;y = 0;x = (x + 1) % g.size();}}// 矫正错误位置while (y >= g[x].size()){y = 0;x = (x + 1) % g.size();}cout << g[x][y] << " ";// 最后一个不用删除 避免死循环if (i < n - 1){g[x].erase(g[x].begin() + y);while (y >= g[x].size()){y = 0;x = (x + 1) % g.size();}}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t;t = 1;while (t--){solve();}
}

Solution 3 Segment tree

We can generalize this problem into easy range query problem …

Subsequent content will be here soon…,


http://www.ppmy.cn/ops/155367.html

相关文章

【大数据技术】教程01:搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell)

搭建完全分布式高可用大数据集群&#xff08;VMwareCentOSFinalShell&#xff09; 资源下载 VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.isoFinalShell 4.5.12 注&#xff1a;请在阅读本篇文章前&#xff0c;将以上资源下载下来。 写在前面 本章主要介…

C# 装箱和拆箱(以及 as ,is)

装箱&#xff08;Boxing&#xff09;是指将值类型转换为引用类型的过程 拆箱&#xff08;Unboxing&#xff09;是将引用类型转换回值类型的过程。 int a 1;object b a; //装箱object obj 10;int num (int)obj; //拆箱ArrayList list new ArrayList();list.Add(123);//装箱…

告别页面刷新!如何使用AJAX和FormData优化Web表单提交

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…

python3+TensorFlow 2.x 基础学习(一)

目录 TensorFlow 2.x基础 1、安装 TensorFlow 2.x 2、TensorFlow 2.x 基础概念 2、1 Eager Execution 2、2 TensorFlow 张量&#xff08;Tensor&#xff09; 3、使用Keras构建神经网络模型 3、1 构建 Sequential 模型 3、2 编译模型 1、Optimizer&#xff08;优化器&a…

ROS-SLAM

基本概念 SLAM 即 Simultaneous Localization and Mapping&#xff0c;中文名为同时定位与地图构建&#xff0c;是机器人、自动驾驶、增强现实等领域中的关键技术。 在未知环境中&#xff0c;搭载特定传感器的主体&#xff08;如机器人、无人机等&#xff09;在运动过程中&am…

精品PPT | 华为企业数据架构、应用架构及技术架构设计方法

这份PPT详细介绍了华为企业数据架构、应用架构及技术架构的设计方法。它涵盖了数据架构的五大原则&#xff0c;包括数据按对象管理、企业全局视角定义数据架构、遵从企业数据分类管理框架、概念实体结构化数字化以及数据服务化同源共享等&#xff0c;旨在确保数据在企业内的一致…

Chromium132 编译指南 - Android 篇(一):编译前准备

1. 引言 欢迎来到《Chromium 132 编译指南 - Android 篇》系列的第一部分。本系列指南将引导您逐步完成在 Android 平台上编译 Chromium 132 版本的全过程。Chromium 作为一款由 Google 主导开发的开源浏览器引擎&#xff0c;为众多现代浏览器提供了核心驱动力。而 Android 作…

【深度解析】DeepSeek-R1的五大隐藏提示词

LangChain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…