N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。

例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。

Input:

2个数N和K,表示N个人,数到K出列。\((2 <= N <= 10^{18}, 2 <= K <= 1000)\)

Output:

最后剩下的人的编号

my solution:暴力打表得出规律:\(f[n]=(f[n-1]+k)%n\)注意这个式子,因为k远远小于n所以,我们可以将式子转化为\((f[n+w]=f[n]+k*w)%(n+w)\),但是注意不能连续实际模两次,否则答案会有误

因此我们\(w=(i-ans)/k+1\),这样保证了<1>最多一次运算会有一次实际取模,<2>保障每次n至少加1,不会死循环

实际上操作我们将ans初始化为0,最后的答案加1,因为只有在区间\((1,n)\)中\(f[i]=(f[i-1]+k)%i\)才成立

复杂度\(O(klogn)\)不会分析

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
long long n,k;
int main(){
cin>>n>>k;
long long ans=0;
for(long long i=1;i<=n;){
long long w=(i-ans)/k+1;
if(w+i>n)w=n-i;
if(w==0)break;
ans=(ans+w*k)%(w+i);
i+=w;
}
cout<<ans+1;
return 0;
}
//code from 本机房巨佬

最新文章

  1. Servlet入门笔记
  2. 【406错误】 The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request &quot;accept&quot; headers.
  3. NOIP提高组2010 关押罪犯
  4. linux进入软连接所指向的原目录
  5. JPEG文件格式介绍
  6. solr与.net系列课程(九)solr5.1的配置
  7. paip.提高效率---微信 手机app快速开发平台—微网络撬动大市场
  8. bzoj 1012 维护一个单调数列
  9. 黄聪:wordpress工作原理
  10. maven的update project是什么意思
  11. android activity空指针异常解决问题解决
  12. 从问题看本质: 研究TCP close_wait的内幕
  13. ELF二进制目标文件详解
  14. Jersey中的常用注解总结
  15. (3)markdown软件的使用
  16. 高级组件——分割面板JSplitPane
  17. 潭州课堂25班:Ph201805201 django框架 第二课 url,,include,kwargs,name的使用 (课堂笔记)
  18. python 读取xml
  19. jmeter☞工作区介绍(三)
  20. mysql中如何比较日期

热门文章

  1. JQuery课堂学习笔记
  2. 训练1-R
  3. [bzoj 2726] 任务安排 (斜率优化 线性dp)
  4. Linux Shell脚本编程-基础1
  5. 在使用SSH+JPA开发中,ajax使用ObjectMapper类从后台向前台传值
  6. mobile touch 备用
  7. 转-----------------------js window.open() 操作
  8. xcode对照两个分支中同一个文件
  9. MySQL DROP TABLE操作以及 DROP 大表时的注意事项
  10. ZOJ 3203