传送门

参考资料

  [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 ;
}

最新文章

  1. C# DataTable的Select()方法不支持 != 判断
  2. 爱春秋之戏说春秋 Writeup
  3. JZOJ P1817:[8.27]研究性学习作业
  4. 内核Makefile编写
  5. crontab 获取本机ip
  6. javascript变量,类型 第9节
  7. Mac下修改Mysql密码
  8. Google论文之三----MapReduce
  9. KVM下windows虚拟机使用virtio驱动
  10. 复习i++和++j
  11. 一个想法照进现实-《IT连》创业项目:创业时该不该用新手程序员
  12. Maven-06: 插件的内置绑定
  13. openjudge(四)
  14. JAVA REENTRANTLOCK、SEMAPHORE 的实现与 AQS 框架
  15. dp Surf
  16. nc 使用实例
  17. Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术
  18. ASM ClassReader failed to parse class file解决方法
  19. jackson用法
  20. thinkphp5.0--验证

热门文章

  1. git gc干了啥
  2. QLabel添加Click信号
  3. V8引擎实现标准ECMA-262(三)
  4. R语言与非参数统计(核密度估计)
  5. Directx11教程(51) 简单的billboard
  6. appium处理混合APP_获取上下文(切换句柄)
  7. 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程(一)(2019-08-23)
  8. Kubernetes Ingress日志分析入门
  9. 阿里巴巴资深技术专家无相:我们能从 InteliJ IDEA 中学到什么?
  10. Puppet基础