传送门

参考资料

  [1]:浅梦无痕

  [2]:Esquecer

  [3]:My CSDN

题意

  n 个人围成一圈,1,2 报数,报 1 的离队,求编号为 x 的第几次出队;

•对博文[1]的理解

  第一轮出队的编号一定为奇数,如果 x 为奇数,那么 x 一定在第一轮就出队了,ans = (x+1) / 2;

  如果 x 不为奇数,那么,执行的过程如下:

 while(x% == )
{
x /= ;
if(n&)
x++;
ans += n/;
n -= n/;
}

  下面来解释一下上述代码的作用;

  ①如果 x 为偶数,那么在第一轮出队中,x 及其之前的偶数不出队,共 x/2 个编号;

  ②如果 n 为偶数,那么第一轮出队中共出队 n/2 个编号,还剩下 n/2 个编号,x 为剩下的编号中的第 x/2 个编号;

  在第二轮出队中,剩下的第一个编号依旧是第一个出队的编号,相当于剩下的 n/2 个编号重复一遍上述①②过程;

  如果 n 为奇数,那么第一轮出队中共出队 n/2+1 个编号,还剩下 n/2 个编号;

  但是,这剩下的 n/2 个编号在第二轮出队中,第一个出队的编号不再是第一个编号,而是第二个编号,与上述②过程不同;

  这该如何处理呢?

  很好办,在第一轮的出队中,让最后一个出队的编号 n 放到第二轮出队的队首位置,那么第二轮出队的编号中,第一个出对的依旧是第一个编号;

  其余编号的变化是在之前的基础上+1,接着重复上述①②过程;

•Code

 #include<bits/stdc++.h>
using namespace std;
#define ll long long ll n,x;
int q; ll Solve()
{
ll ans=;
ll cur=n;
while(x% == )
{
x /= ;///x及其之前共有x/2个编号
if(cur&)///如果当前剩余奇数个编号,将最后一个编号放到下一轮出队
x++;
ans += cur/;
cur -= cur/;
}
ans += (x+)/;
return ans;
}
int main()
{
scanf("%lld%d",&n,&q);
while(q--)
{
scanf("%lld",&x);
printf("%lld\n",Solve());
}
return ;
}

•对博文[2]的理解

  

  短小精悍的代码,tql!

  如果 x 不为奇数,那么 x 肯定不再这一轮中出队,而 x 之前的偶数也不再这一轮中出队;

  即有 x/2 个编号不在这一轮中出队,那么相当于在这 n 个编号的队尾增加 x/2 个编号, x 变成队尾编号;

  接着执行上述过程;

•Code

 #include<bits/stdc++.h>
using namespace std;
#define ll long long ll n,x;
int q; ll Solve()
{
while(x% == )
x=n+x/;///将x/2个编号加入队尾,x变为队尾编号,并判断x是否可以在第一轮中出队
return x/+;
}
int main()
{
scanf("%lld%d",&n,&q);
while(q--)
{
scanf("%lld",&x);
printf("%lld\n",Solve());
}
return ;
}

Wannafly挑战赛15 C“出队”(约瑟夫环类问题)的更多相关文章

  1. 牛客网Wannafly挑战赛15 B车辆安排(模拟)AND C 出队(规律)

    传送门 :B题:点我 C题: 点我 题目描述 有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数 输入描述: 第一行n第二行n个数,表示每个队伍的人数 ...

  2. 3,java数据结构和算法:约瑟夫环出队顺序, 单向环形链表的应用

    什么是约瑟夫环? 就是数小孩游戏: 直接上代码: 要实现这个,只需要理清思路就好了 孩子节点: class Boy{ int no;//当前孩子的编码 Boy next; // 下一节点 public ...

  3. Wannafly挑战赛15-C-出队

    链接:https://www.nowcoder.com/acm/contest/112/C来源:牛客网 约瑟夫问题(https://baike.baidu.com/item/约瑟夫问题),n个人,1 ...

  4. 通过例子进阶学习C++(六)你真的能写出约瑟夫环么

    本文是通过例子学习C++的第六篇,通过这个例子可以快速入门c++相关的语法. 1.问题描述 n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局:然后从出局的下一个人重新 ...

  5. Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)

    1.Josephu(约瑟夫.约瑟夫环)问题: 设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m ...

  6. 约瑟夫环问题详解 (c++)

    问题描述: 已知n个人(以编号0,2,3...n-1分别表示)围坐在一起.从编号为0的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下去,直到圆桌周围的 ...

  7. tc 147 2 PeopleCircle(再见约瑟夫环)

    SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...

  8. 约瑟夫环(Josehpuse)的模拟

    约瑟夫环问题: 0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 这里给出以下几种解法, 1.用队列模拟 每次将前m-1个元 ...

  9. 14.约瑟夫环问题[JosephusProblem]

    [题目] n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除 ...

随机推荐

  1. 【心有猛虎】react-pxq

    这是一个比较完整的简单的react移动端项目,说起来页面少,其实,构思若是精巧,也并不容易做 先放源码:https://github.com/bailicangdu/react-pxq 接下来我们简单 ...

  2. 类似淘宝五星点评 ,Jquery实现代码

    <!--默认五星,根据鼠标点击判断--> <!DOCTYPE html><html lang="en"><head> <met ...

  3. $(window).scrollTop() == $(document).height() - $(window).height()(底端)

    jQuery(window).height()代表了当前可见区域的大小,而jQuery(document).height()则代表了整个文档的高度,可视具体情况使用. 注意当浏览器窗口大小改变时(如最 ...

  4. 【水滴石穿】react-native-template-app

    这个也是一个基础项目 地址如下https://github.com/ndlonghi/react-native-template-app 点击登陆跳转到首页 分析代码如 react-native-te ...

  5. win2003开启ftp

    首先你要添加IIS,然后才可以启动配置FTP,步骤如下: 1.控制面板→添加或删除程序→添加/删除windows组件: 2.在弹出的windows组件向导窗口中,选择并勾选“应用程序服务器”,然后点击 ...

  6. photoshop正确的打开方式

    首先这边我先贴一个地址:https://www.adobe.com/cn/products/photoshop.html 安装软件,这里就不赘述了,真的不会,可以百度^_^我当初就是百度的,哈哈 说到 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...

  8. vmware中centos、redhat桥接网络配置

    第一步 第二步 第三步 centos: redhat:

  9. C语言中内存的管理

    一.动态内存分配与释放 1.为什么要使用动态内存分配,以下看一个实例,关于超市中购买记录的一段程序 #include <stdio.h> #include <string.h> ...

  10. 阿里云DataWorks正式推出Stream Studio:为用户提供大数据实时计算的数据中台

    5月15日 阿里云DataWorks正式推出Stream Studio,正式为用户提供大数据的实时计算能力,同时标志着DataWorks成为离线.实时双计算领域的数据中台. 据介绍,Stream St ...