题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5860

题目大意:给你n个人排成一列编号,每次杀第一个人第i×k+1个人一直杀到没的杀。然后剩下的人重新编号从1~剩余的人数。按照上面的方式杀。问第几次杀的是谁。

分析

一轮过后和原来问题比只是人的编号发生变化,故可以转化为子问题求解,不妨设这n个人的编号是0~n-1,对于第i个人,如果i%k=0,那么这个人一定是第一轮出列的第i/k+1个人;如果i%k!=0,那么这个人下一轮的编号就是i-i/k-1;

#include<stdio.h>
#include<algorithm>
using namespace std ;
#define N 3000000+10 struct no
{
int d ; ///表示哪一轮被杀
int num ; ///表示当前轮第几个被杀
int p ; ///表示本身是几号
}s[N]; bool cmp(no a , no b)
{
if(a.d==b.d)
return a.num<b.num;
return a.d<b.d;
} int main( )
{
int T,n,k,q,m;
scanf("%d",&T);
while(T--)
{
scanf("%d %d %d",&n,&k,&q);
s[].num=;
for(int i= ; i<n ; i++)
{
s[i].p=i+;
if(i%k==)
{
s[i].d=;
if(i==)
continue;
s[i].num=s[i-k].num+;
}
else
{
s[i].d=s[i-i/k-].d+;
s[i].num=s[i-i/k-].num;
}
}
sort(s,s+n,cmp); while(q--)
{
scanf("%d",&m);
m--;
printf("%d\n",s[m].p);
}
}
}

最新文章

  1. 文件上传命令rz和下载命令sz的安装
  2. fbset 移植
  3. 利用excel拆分数据
  4. CentoS 下报的 Requires: perl(:MODULE_COMPAT_5.8.8)
  5. CodeForces 602D 【单调队列】【简单数学】
  6. 《JavaScript模式》读书笔记
  7. 处理emacs-org模式TODO的一个脚本
  8. Android判断网络连接状态
  9. Knockout 可扩展性
  10. MySQL 5.5.x配置文件详解
  11. redis基础(一)
  12. 【视频编解码&#183;学习笔记】7. 熵编码算法:基础知识 &amp; 哈夫曼编码
  13. python的单元测试unittest模块
  14. HTML5-Input
  15. Axis2部署后服务器端出现异常信息
  16. redis在游戏服务器中的使用初探(二) 客户端开源库选择
  17. Lodop设置文本项行间距、字间距
  18. No CPU/ABI system image available for this target 解决办法
  19. STL 基本概念
  20. solr 服务搭建

热门文章

  1. 用sass的minix定义一些代码片段,且可传参数
  2. 人工智能二之Sublime Text3环境配置
  3. NIO/AIO
  4. webform 内置对象(页面间传值)
  5. QGraphicsScene绘制网格背景
  6. EZOJ #79
  7. p2657 windy数
  8. 数据结构_我不会AVL_wbhavl
  9. 关于LIst Set Map 异常的知识点---我的笔记
  10. Mysql 大数据量导入程序