【51nod1073】约瑟夫环1
题目大意:给定 \(N\) 个人围成一个圈,每隔 \(M\) 个人杀一个,求最后活着的人的编号。
题解:环会涉及模运算,所以先将 \(1 \rightarrow N\) 映射为 \(0 \rightarrow N-1\),且报数从 \(0\) 开始,即:报数到 \(m-1\) 的人会被杀掉。假设已知 \(N-1\) 人时剩下的人的编号为 \(x\),如何求得 \(N\) 个人时活着的人的编号是问题的关键。现在逆向考虑问题,即:游戏第一次杀人后的子问题和原问题之间的关系。假设第一次报数时,编号为 \(k-1\) 的人被杀,则第 \(k\) 个人到第 \(k-2\) 个人组成的新环恰好构成了一个 \(N-1\) 个人的子问题,且 \(k \rightarrow 0,k-2 \rightarrow n-2\)。可知,\(f[i]=(f[i-1]+k)\% i\),其中 \(k=m\% n\) 。因此,最后的递推公式为:\(f[i]=(f[i-1]+m)\% i,f[1]=0\)。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,m,f[maxn];
void solve(){
f[1]=0;
for(int i=2;i<=n;i++)f[i]=(f[i-1]+m)%i;
printf("%d\n",f[n]+1);
}
int main(){
scanf("%d%d",&n,&m);
solve();
return 0;
}
【51nod1073】约瑟夫环1的更多相关文章
- Java实现约瑟夫环
什么是约瑟夫环呢? 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个 ...
- poj 3517 约瑟夫环
最简单的约瑟夫环,虽然感觉永远不会考约瑟夫环,但数学正好刷到这部分,跳过去的话很难过 直接粘别人分析了 约瑟夫问题: 用数学方法解的时候需要注意应当从0开始编号,因为取余会等到0解. 实质是一个递推, ...
- C++ 约瑟夫环
约瑟夫环: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周 ...
- 用pl/sql游标实现约瑟夫环
什么是约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为1的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数, ...
- 51nod 1073 约瑟夫环
题目链接 先说一下什么是约瑟夫环,转自:传送门 关于约瑟夫环问题,无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大( ...
- 通过例子进阶学习C++(七)CMake项目通过模板库实现约瑟夫环
本文是通过例子学习C++的第七篇,通过这个例子可以快速入门c++相关的语法. 1.问题描述 回顾一下约瑟夫环问题:n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局:然 ...
- php解决约瑟夫环
今天偶遇一道算法题 "约瑟夫环"是一个数学的应用问题:一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把 ...
- POJ-2886 Who Gets the Most Candies?---线段树+约瑟夫环
题目链接: https://cn.vjudge.net/problem/POJ-2886 题目大意: N个人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出来的人(如果他手上拿的数为正数,从他左边数 ...
- "递归"实现"约瑟夫环","汉诺塔"
一:约瑟夫环问题是由古罗马的史学家约瑟夫提出的,问题描述为:编号为1,2,-.n的n个人按顺时针方向围坐在一张圆桌周围,每个人持有一个密码(正整数),一开始任选一个正整数作为报数上限值m,从第一个人开 ...
随机推荐
- Python基础(条件判断和循环) if elif else for while break continue;
条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= ...
- Qt程序修改Ubuntu系统时间
QString str = QString("sudo date -s %1/%2/%3").arg(iMonth).arg(iDay).arg(iYear); system(st ...
- JS计算混合字符串长度
用的是正则表达式 var str = ”坦克是tank的音译”; var len = str.match(/[^ -~]/g) == null ? str.length : str.length + ...
- LOJ#6503.「雅礼集训 2018 Day4」Magic[容斥+NTT+启发式合并]
题意 \(n\) 张卡牌 \(m\) 种颜色,询问有多少种本质不同的序列满足相邻颜色相同的位置数量等于 \(k\). 分析 首先本质不同不好直接处理,可以将同种颜色的卡牌看作是不相同的,求出答案后除以 ...
- 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget
目录 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget 正文 对我的启发 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois ...
- 用信鸽来讲解HTTPS的知识
加密是一个很难理解的东西,这里头满是数学证明.不过,除非你是在开发一个加密系统,否则无需了解那些高阶的复杂知识. 如果你看这篇文章是为了创造下一个 HTTPS 协议,很抱歉,请出门左走,鸽子是远远不够 ...
- WebShell代码分析溯源(第1题)墨者学院
一.访问链接 二.下载系统源码后直接放到D盾里扫描,扫到后门文件 三.查看该木马文件 <?php error_reporting(0); $_GET['POST']($_POST['GET']) ...
- 桌面输入法评测报告 之 搜狗拼音输入法vs必应拼音输入法
输入法是电脑用户不可或缺的软件,它几乎无时无刻不陪伴在使用者的身旁.一个优秀的输入法,应该满足客户对使用体验以及效率的需求.我们小队的任务便是对当今最为常用的两种输入法: 搜狗拼音输入法和必应拼音输入 ...
- linux内核分析第二周
网易云课堂linux内核分析第二周 20135103 王海宁 <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
- beta版本“足够好”/测试矩阵
能通过地图鱼相应的地点信息实时交互,便于用户操作. 测试矩阵