Gym - 101955K Let the Flames Begin 约瑟夫环
Gym - 101955KLet the Flames Begin
说实话,没怎么搞懂,直接挂两博客。
小飞_Xiaofei的约瑟夫问题(Josephus Problem)3:谁最后一个出列
小飞_Xiaofei的约瑟夫问题(Josephus Problem)4:第k个出列的人是谁
等真正搞明白再来理一理思路,现在直接将讲一下流程。
约瑟夫环题目就是n个人轮流报数,报到k的出列,然后接着重新从1开始报,再报到k的出列。
求最后一个出列的人便是,设ans=0,然后for(int i=1;i<=n;i++) ans=(ans+k)%i,最后ans+1
而求第m个出列的人便是,设m=n+1-m ans=(k-1)%m for(int i=m+1;i<=n;i++) ans=(ans+k)%i,最后ans+1
然后当n,m,k都很大,但min(m,k)挺小时,便是这题的情况,便把用区间跳跃的思想,把一些不用取模的加法合并成一个乘法。
csu_xiji的codeforces gym101955 K Let the Flames Begin 约瑟夫环问题
#include<cstdio>
typedef long long ll;
int main(){
int t=,T;
ll n,m,k;
scanf("%d",&T);
while(t<=T){
scanf("%lld%lld%lld",&n,&m,&k);
ll ans,d,p;
if(k==) ans=m-;
else{
m=n+-m;
ans=(k-)%m;
if(n+-m<=k){
p=m+;
while(p<=n){
ans=(ans+k)%p;
p++;
}
}else{
p=m;
while(true){
d=(p-ans)/(k-);
if(d*(k-)==(p-ans)) d--;
if(d>n-p) d=n-p;
p+=d;
ans+=d*k;
if(p==n) break;
p++;
ans=(ans+k)%p;
if(p==n) break;
}
}
}
printf("Case #%d: %lld\n",t++,ans+);
}
return ;
}
题解做题法
Gym - 101955K Let the Flames Begin 约瑟夫环的更多相关文章
- 用pl/sql游标实现约瑟夫环
什么是约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为1的人开始报数,数到m的那个人出列:他的下一个人又从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的那个人又出列:依此规律重复下去,直到圆桌周 ...
- 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个人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出来的人(如果他手上拿的数为正数,从他左边数 ...
- 剑指Offer45 约瑟夫环
/************************************************************************* > File Name: 45_LastNu ...
随机推荐
- centos7搭建EFK日志分析系统
前言 EFK可能都不熟悉,实际上EFK是大名鼎鼎的日志系统ELK的一个变种 在没有分布式日志的时候,每次出问题了需要查询日志的时候,需要登录到Linux服务器,使用命令cat -n xxxx|grep ...
- RMAN执行crosscheck archive报错ORA-19633问题处理
一.问题现象 RMAN connect target /; run { crosscheck archivelog all; } ORA-: control file record is out of ...
- vs professional 2019 离线安装包下载方法
run->cmd D:\vsprofessional2019>vs_professional__1254024763..exe --layout D:\vsprofessional2019 ...
- Go part 2 基础语法
关键字.标识符 标识符: 是用户或系统定义的有意义单词组合,或单词与数字组合(具体意义有定义者决定) 标识符以字母下划线开头,大小写敏感,比如:boy, Boy, _boy, _(匿名变量,用来 ...
- python运行报错:cannot import name 'InteractiveConsole'
ModuleNotFoundError: No module named '_pydevd_bundle.pydevd_cython' ImportError: cannot import name ...
- 基于微软hyper-v虚拟化服务器搭建方法和步骤整理
基于Microsoft基础设施私有云计算搭建 摘要:私有云是指组织机构建设的专供自己使用的云平台,它所提供的服务不是供他人使用,而是供自己的内部人员或分支机构使用,不同于公有云,私有云部署在企业内部网 ...
- jar下载及Maven配置整理
Spring的各版本jar包下载地址http://repo.spring.io/release/org/springframework/spring/ springframework下载地址https ...
- 阿里P7级教你如何在Spring Boot应用程序中使用Redis
在Spring Boot应用程序中使用Redis缓存的步骤: 1.要获得Redis连接,我们可以使用Lettuce或Jedis客户端库,Spring Boot 2.0启动程序spring-boot-s ...
- Linux网络管理——ifconfig、route
Linux识别到的网络设备 eth# eth0 eth1 以太网卡 wifi# wifi0 wifi1 无线网卡 ppp# ppp0 ppp1 拨号连接 lo 本地环回网卡 ...
- python获取字符串的前几个字符(包含汉字)
一个简单的字符串,比如a="小明xiaoming"或者b="小xiao明ming".想在只想得到字符串的前4个元素,a1="小明xi",b= ...