uva 1394 - And Then There Was One

简介: 点击打开链接uva 1394 思路: 数学递推 分析: 1 题目是一道变形的约瑟夫环变形问题 2 网上看到一篇很好的数学递推法 问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。

点击打开链接uva 1394


思路: 数学递推
分析:
1 题目是一道变形的约瑟夫环变形问题
2 网上看到一篇很好的数学递推法
问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。

编号0-(n-1)是有意义的,因为要模n,所以用0-(n-1)更好操作

我们知道第一个人(编号一定是(m-1) mod n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m mod n的人开始):
k k+1 k+2 ... n-2,n-1,0,1,2,... k-2
并且从k开始报0。
现在我们把他们的编号做一下转换:
k --> 0
k+1 --> 1
k+2 --> 2
...
...
k-2 --> n-2
变换后就完完全全成为了(n-1)个人报数的子问题,假如我们知道这个子问题的解:例如x是最终的胜利者,那么根据上面这个表把这个x变回去不刚好就是n个人情况的解吗?!!变回去的公式很简单,相信大家都可以推出来:x'=(x+k) mod n

f[n]=(f[n-1]+k)%n,f[1]=0;  f[i]表示有i个人时,最后胜利者编号

---------------

现在这个问题是从m开始,即是首先(m-1)编号的人出去。。然后就和普通约瑟夫环一样了。

故只要我们f[n]=(f[n-1]+m)%n单独算就行了。其他f[i]=(f[i-1]+k)%i;(1<i<n);

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 10010;
int n , m , k , dp[MAXN];

int main(){
    while(scanf("%d%d%d" , &n,&k,&m) && n+m+k){
         dp[1] = 0;
         for(int i = 2 ; i < n ; i++)
             dp[i] = (dp[i-1]+k)%i; 
         dp[n] = (dp[n-1]+m)%n;
         printf("%d\n" , dp[n]+1);
    }
    return 0;
}




目录
相关文章
|
移动开发 前端开发 JavaScript
js实现图片压缩上传
最近在研究H5前端图片处理相关技术,方向有图片压缩、裁切、旋转、模糊等。
352 0
|
10月前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
运维 安全 搜索推荐
记一次crontab定时任务被清空的故障原因定位及复盘过程
记一次crontab定时任务被清空的故障原因定位及复盘过程
331 0
|
机器学习/深度学习 人工智能 监控
人工智能在图像识别中的应用:基于深度学习的算法实现
人工智能在图像识别中的应用:基于深度学习的算法实现
772 1
|
Python
TypeError: int() argument must be a string, a bytes原因
Python开发过程中,使用int()函数来转换或生成int类型的数据时,如果Python抛出并提示TypeError: int() argument must be a string, a bytes-like object or a real number, not 'complex',那么原因在于传递给int()函数的参数类型有误,正如TypeError的提示,int()函数的参数必须是string字符串(数值字符串)、类似字节对象、real number数字等,而不可以是complex复数类型的数据。
777 0
|
Web App开发
Dreamweaver CS6破解教程[序列号+破解补丁
Adobe Dreamweaver CS6中文简体版下载地址:Dreamweaver CS6中文简体版下载[带破解] 该教程将不断更新,最新版请猛击:http://www.itxueyuan.org/view/6317.html 破解之前的准备 1) 序列号这里为大家生成了两个,可以通过软件验证:1325-0949-2080-9819-3777-32301325-0160-5283-9851-2671-89512) 破解补丁安装时会用到,请大家提前下载好(安装时需要断网)。
2498 0
|
Web App开发 缓存 前端开发
canvas项目内复制粘贴及自定义菜单复制粘贴实现
一、 产品视角下复制粘贴需要解决的问题 复制粘贴时,需要静默复制(剪切板内不会看到复制的具体内容, 同miro) 统一自定义鼠标复制粘贴和键盘复制粘贴内容 实现外部内容也可以粘贴到内部
1689 0
|
前端开发 JavaScript
Vue:xlsx实现Excel文件的导入导出
Vue:xlsx实现Excel文件的导入导出
412 0
|
机器学习/深度学习 监控 搜索推荐
【行业应用】阿里云实时计算 Flink 版广告行业解决方案
互联网广告领域经过长期发展,分工逐渐精细化,除了各种代理商之外,还出现了 ADN、SSP、ADX、DSP 等各种平台,市场结构极为复杂,形成了一个巨大的生态。
【行业应用】阿里云实时计算 Flink 版广告行业解决方案
|
弹性计算 安全 关系型数据库
基于阿里云的企业安全最佳实践
账户安全管理1、为云账户和高风险权限RAM用户启用多因素认证(MFA)。2、授权予高风险特权操作时,使用带IP和MFA限制条件的授权策略进行授权。3、分离用户管理、权限管理与资源管理的RAM用户,分权制衡。
2687 0