原题链接

Problem Description
You may heard of the Joseph Problem, the story comes from a Jewish historian living in 1st century. He and his 40 comrade soldiers were trapped in a cave, the exit of which was blocked by Romans. They chose suicide over capture and decided that they would form a circle and start killing themselves using a step of three. Josephus states that by luck or maybe by the hand of God, he and another man remained the last and gave up to the Romans.

Now the problem is much easier: we have N men stand in a line and labeled from 1 to N, for each round, we choose the first man, the k+1-th one, the 2*k+1-th one and so on, until the end of the line. These poor guys will be kicked out of the line and we will execute them immediately (may be head chop, or just shoot them, whatever), and then we start the next round with the remaining guys. The little difference between the Romans and us is, in our version of story, NO ONE SURVIVES. Your goal is to find out the death sequence of the man.

For example, we have N = 7 prisoners, and we decided to kill every k=2 people in the line. At the beginning, the line looks like this:

1 2 3 4 5 6 7

after the first round, 1 3 5 7 will be executed, we have

2 4 6

and then, we will kill 2 6 in the second round. At last 4 will be executed. So, you need to output 1 3 5 7 2 6 4. Easy, right?

But the output maybe too large, we will give you Q queries, each one contains a number m, you need to tell me the m-th number in the death sequence.

 
Input
Multiple cases. The first line contains a number T, means the number of test case. For every case, there will be three integers N (1<=N<=3000000), K(1<=K), and Q(1<=Q<=1000000), which indicate the number of prisoners, the step length of killing, and the number of query. Next Q lines, each line contains one number m(1<=m<=n).
 
Output
For each query m, output the m-th number in the death sequence.
 
Sample Input
1
7 2 7
1
2
3
4
5
6
7
 
Sample Output
1
3
5
7
2
6
4
 
Author
BUPT
 
Source
 
Recommend
wange2014   |   We have carefully selected several similar problems for you:  5867 5866 5865 5864 5863 
 
题意:输入n表示1到n ,输入k,q   去掉一些数,从1开始 1、k+1、2*k+1、3*k+1、4*k+1、5*k+1........直到i*k+1>n结束   然后剩下的数又成一个1到(n)  的序列,重复操作,直至序列为空,q次询问,每次输入x,输出第x次去掉的数的下标;
 
思路:仔细推一下,发现存在递推关系,若第i个数满足(i-1)%k==0 则a[i]=1;否则a[i]=a[i-(i-1)/k-1]+1;  并且在循环中用前行星记录当前数是在第几层去掉的,然后再一重循环从层次最大处开始给a[i]赋值是第i次去掉的数在序列中的下标;
 
代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
const int N=;
int head[N];
int a[N];
struct Node
{
int to;
int next;
}node[N]; int main()
{
int T;
cin>>T;
while(T--)
{
int n,k,q;
scanf("%d%d%d",&n,&k,&q);
memset(head,,sizeof(head));
int tot=;
for(int i=;i<=n;i++)
{
if((i-)%k==) a[i]=;
else a[i]=a[i-(i-)/k-]+;
node[tot].to=i;
node[tot].next=head[a[i]];
head[a[i]]=tot++;
}
int cnt=n;
for(int i=tot-;i>=;i--)
{
for(int j=head[i];j;j=node[j].next)
{
a[cnt--]=node[j].to;
}
}
while(q--)
{
int x;
scanf("%d",&x);
printf("%d\n",a[x]);
}
}
return ;
}

2016暑假多校联合---Death Sequence(递推、前向星)的更多相关文章

  1. 2016暑假多校联合---Rikka with Sequence (线段树)

    2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...

  2. 2016暑假多校联合---Another Meaning

    2016暑假多校联合---Another Meaning Problem Description As is known to all, in many cases, a word has two m ...

  3. 2016暑假多校联合---Windows 10

    2016暑假多校联合---Windows 10(HDU:5802) Problem Description Long long ago, there was an old monk living on ...

  4. 2016暑假多校联合---Substring(后缀数组)

    2016暑假多校联合---Substring Problem Description ?? is practicing his program skill, and now he is given a ...

  5. 2016暑假多校联合---To My Girlfriend

    2016暑假多校联合---To My Girlfriend Problem Description Dear Guo I never forget the moment I met with you. ...

  6. 2016暑假多校联合---A Simple Chess

    2016暑假多校联合---A Simple Chess   Problem Description There is a n×m board, a chess want to go to the po ...

  7. HDU 5860 Death Sequence(递推)

    HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...

  8. hdu 5860 Death Sequence(递推+脑洞)

    Problem Description You may heard of the Joseph Problem, the story comes from a Jewish historian liv ...

  9. 2016暑假多校联合---GCD

    Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). ...

随机推荐

  1. Nodejs·构建web应用

    本篇的内容比较多..... 1 首先是从基本的Nodejs服务方面讲述前后端统一语言在web应用中的作用: 2 然后讲了web中基本的知识,从请求方法到路由.从查询字符串到Cookie和Session ...

  2. iOS 屏幕适配:autoResizing autoLayout和sizeClass

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  3. HTML基础笔记-02

    ---恢复内容开始--- 学习网站:W3School 一.HTML的认识 纯文本语言:只显示内容,不显示样式,也不能描述语义的文档,但是也不会乱码 语义:数据的含义就是语义,数据是符号,在这表示标签 ...

  4. JS checkbox 全选 全不选

    /* JS checkbox 全选 全不选 Html中checkbox: <input type="checkbox" name="cbx" value= ...

  5. 第三节:Vue计算属性

    计算属性就是当其依赖的属性的值发生变化的时候,这个属性的值就会自动更新. 例子: <!DOCTYPE html> <html> <head> <meta ch ...

  6. CAS原子锁 高效自旋无锁的正确用法

    "atomic_lock.h" #pragma once #ifndef _atomic_lock_h_include_ #define _atomic_lock_h_includ ...

  7. vc操作windows防火墙的方法

    收藏该地址,以备不时之需. http://msdn.microsoft.com/en-us/library/aa364726.aspx

  8. 利用跨域请求来隐藏firbug控制台中的Ajax请求

    本文链接:http://www.orlion.ml/63/ 普通jquery的Ajax请求在控制台中是可见的,如下: 而在利用jsonp(json with padding)进行Ajax跨域时,发现A ...

  9. 【Discuz】关闭QQ互联插件提示信息:系统繁忙,请稍后再试

    版本:X3.2.20160601 提示信息 系统繁忙,请稍后再试 解决方案 Step1.删除QQ互联插件目录 网站的根目录\source\plugin\qqconnect Step2.上传原始QQ互联 ...

  10. Oracle Linux

    一. Oracle Linux下载地址 ftp://ftp.linux.org.uk/pub/distributions/enterprise/ 该地址包含Oracle Linux 6以上版本及RHE ...