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 ...
随机推荐
- Unity中的Character Controller
Unity中默认提供了一个Character Controller的组件用于实现角色控制,一个3D的游戏物体,可以直接添加.Character Controller会自动模拟出Capsule Coll ...
- (九)mybatis之延迟加载
一.为什么要使用延迟加载? 使用延迟加载的意义 在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度快. 如果查询单表就可以满足需求,一开始先查询单表,当需要关联 ...
- 重装win7后如何恢复ubuntu引导
在重装系统之后,开机启动界面的ubuntu引导不见了,直接进入新安装的window系统中.下面是如何恢复ubuntu引导的方法: 1)准备一张ubuntu系统安装盘: 2)将ubuntu系统安装盘放入 ...
- pytorch自定义网络层以及损失函数
转自:https://blog.csdn.net/dss_dssssd/article/details/82977170 https://blog.csdn.net/dss_dssssd/articl ...
- oracle学习笔记:字符串替换 replace、regexp_replace、translate函数
1.replace 函数 语法:replace(char, search_string, replacement_string) --针对字符串替换 功能: 将char中的字符串替换. 当re ...
- Ubuntu安装rpm
# sudo apt-get install alien # sudo alien xxx.rpm # sudo dpkg -i xxx.deb
- vue基本语法概要(一)
先看两种代码,再进行讲解 第一种格式: <template > <div> <div v-for=" item in sites "> < ...
- 2.Redis 入门介绍
A)入门概述: 1.是什么: Redis:REmote Dlctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵循BSD协议,是一个高性能的(key/value) ...
- 理解JVM之垃圾回收
1.垃圾收集算法 1) 标记-清楚算法:该算法是最基础的收集算法,其分为标记与清除两个阶段.首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,该算法主要有两个不足:一个是效率问题,标 ...
- RabbitMQ中初始化ConnectionFactory常用设置属性
初始化ConnectionFactory 代码 ConnectionFactory factory = new ConnectionFactory(); factory.setHost(ip); fa ...