`
Simone_chou
  • 浏览: 192684 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Jump(递推)

    博客分类:
  • UVA
 
阅读更多

4727 - Jump

Asia - Seoul - 2009/2010

Integers 1, 2, 3,..., n are placed on a circle in the increasing order as in the following figure. We want to

construct a sequence from these numbers on a circle. Starting with the number 1, we continually go round by

picking out each k-th number and send to a sequence queue until all numbers on the circle are exhausted. This

linearly arranged numbers in the queue are called Jump(n, k) sequence where 1 n, k.

Let us compute Jump(10, 2) sequence. The first 5 picked numbers are 2, 4, 6, 8, 10 as shown in the following

figure. And 3, 7, 1, 9 and 5 will follow. So we get Jump(10, 2) = [2,4,6,8,10,3,7,1,9,5]. In a similar way, we

can get easily Jump(13, 3) = [3,6,9,12,2,7,11,4,10,5,1,8,13], Jump(13, 10) = [10,7,5,4,6,9,13,8,3,12,1,11,2]

and Jump(10, 19) = [9,10,3,8,1,6,4,5,7,2].

Jump(10,2) = [2,4,6,8,10,3,7,1,9,5]

You write a program to print out the last three numbers of Jump(n, k) for n, k given. For example suppose that

n = 10, k = 2, then you should print 1, 9 and 5 on the output file. Note that Jump(1, k) = [1].

 

Input

Your program is to read the input from standard input. The input consists of T test cases. The number of test

cases T is given in the first line of the input. Each test case starts with a line containing two integers n and k,

where 5 n 500, 000 and 2 k 500, 000.

 

Output

Your program is to write to standard output. Print the last three numbers of Jump(n, k) in the order of the last

third, second and the last first. The following shows sample input and output for three test cases.

 

Sample Input

3

10 2

13 10

30000 54321

 

Sample Output

1 9 5

1 11 2

10775 17638 23432

 

         题意:

         约瑟夫环问题。给出 N 和 M,输出最后输出的三个数是什么。

 

         思路:

         递推。a,b,c 保存最后三个的数是什么。

 

         AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main() {
        int t;
        scanf("%d", &t);

        while (t--) {
                int n, m;
                int a, b, c;
                scanf("%d%d", &n, &m);

                if (m % 6 == 1) a = 1, b = 2, c = 3;
                if (m % 6 == 2) a = 2, b = 1, c = 3;
                if (m % 6 == 3) a = 3, b = 1, c = 2;
                if (m % 6 == 4) a = 1, b = 3, c = 2;
                if (m % 6 == 5) a = 2, b = 3, c = 1;
                if (m % 6 == 0) a = 3, b = 2, c = 1;

                for (int i = 4; i <= n; ++i) {
                        a = !((a + m) % i) ? i : (a + m) % i;
                        b = !((b + m) % i) ? i : (b + m) % i;
                        c = !((c + m) % i) ? i : (c + m) % i;
                }

                printf("%d %d %d\n", a, b, c);
        }

        return 0;
}

 

分享到:
评论

相关推荐

    bestspeculate.rar_matlab循环递推_最小二乘_最小二乘法_递推 MATLAB_递推 最小二乘法

    在MATLAB编程环境中,"bestspeculate.rar"这个压缩包文件包含了关于利用循环递推实现最小二乘法的实例。最小二乘法是一种常见的数据拟合技术,它用于找到最佳的线性参数估计,使得观测数据与模型预测值之间的残差...

    【递推十大题】

    递推算法是一种常见的算法,它通过已知的前几个数的数值,逐步推导出后续的数值。递推与动态规划(DP)在某些方面有相似之处,但它们在解决问题的方式和适用的场景上存在差异。动态规划通常涉及到状态转移方程的定义...

    递推课件-ACM 程序设计

    递推问题:递推与递归解法 递推问题的一般步骤: 一. 判断是否属于递推问题:这个没有可套用的公式,凭经验,具体问题具体考虑 如果把问题的规模缩小,得到的小问题与原问题在结构上性质上相同或相似,并且子问题与...

    归纳策略之递推算法

    **归纳策略之递推算法详解** 递推算法是一种在解决问题时,通过定义当前状态与前一个或几个状态之间关系的方法。这种关系通常被表述为一个递推公式,用于描述序列中每一项如何由前面的项计算得出。在给定的描述中,...

    递推求解----递推公式的伟大意义

    递推求解是一种在计算机科学和数学中广泛使用的解决问题的方法,尤其在算法设计和理论分析中扮演着重要的角色。递推公式是递推求解的核心工具,它通过定义当前值与前一个或多个值的关系来表示序列或序列的元素。递推...

    递推最小二乘法matlab程序

    递推最小二乘法matlab程序

    递推专项训练 包括题目和标程

    **递推专题训练** 在计算机科学领域,尤其是编程竞赛如NOIP(全国青少年信息学奥林匹克竞赛)和ACM(国际大学生程序设计竞赛)中,递推作为一种强大的算法思想,经常被用于解决各种复杂问题。递推是通过已知的前几...

    递推平均滤波与加权滤波_加权滤波_递推平均滤波_

    本主题将深入探讨两种滤波方法:递推平均滤波(Recursive Average Filtering)和加权滤波(Weighted Filter),并通过C++编程示例进行阐述。 递推平均滤波是一种简单的线性滤波器,它通过不断更新平均值来实现对...

    递推最小二乘算法

    递推最小二乘算法递推最小二乘算法递推最小二乘算法递推最小二乘算法递推最小二乘算法递推最小二乘算法

    基于递推预报误差算法的前馈神经网络的设计

    本文所介绍的是一种基于递推预报误差算法的前馈神经网络的设计。这种网络设计在非线性系统模型的仿真试验中表现出了良好的效果,同时在文中也给出了试验的结果和网络应用的讨论。 首先需要了解的是前馈神经网络。...

    递推式的一般代数解法

    算法分析中经常遇到需要求解递推式的情况,即将递推式改写为等价的封闭形式。例如汉诺塔问题的时间复杂度递推 形式为 T (n)=2T (n−1)+1 (n≥1) ,可以解出封闭形式为 T (n)=2 n −1 (设初始状态 T (0)=0 )。 因为...

    数学递推小结

    关于几种递推

    递推实训题解答

    这两道题目都是基于递推关系来解决实际问题的典型实例,它们都涉及到寻找特定序列的通项公式,并通过编程实现来求解。 首先看第一道题,猴子爬山问题。猴子上山每步可以跳1级或3级,我们要找出到达30级台阶的不同...

    c++递归/递推经典题目

    这里是本蒟蒻整理/写的递归递推经典题目 上传供大家学习使用 包含:过河卒、过河卒升级版、汉诺塔、级数求和、勒让德多项式、流感传染、判断回文、判断元素是否存在、平方根级数、平面分割升级版、全排列递归版、...

    递推最小二乘法

    "递推最小二乘法" 递推最小二乘法是解决线性方程组的重要方法之一。该方法基于递推最小二乘算法(RLS),可以求解线性方程组的最优解。递推最小二乘法的思想是将线性方程组转换为递推形式,然后使用递推最小二乘...

    信息学奥赛一本通-教程PPT课件(第五版)算法部分 第三章 递推算法.pdf

    递推算法通常分为前向递推和后向递推,其中前向递推是从已知项开始,逐项推出后续项;后向递推则是从已知项开始逆向计算前一项。在实际编程应用中,递推算法可以用来求解诸如斐波那契数列等问题。 2. 楼梯走法问题...

    MATLAB递推最小二乘算法

    rls算法,递推最小二乘法是最小二乘法中的一种快速算法。递推最小二乘(RLS)算法在迭代过程的每一步都能达到最佳迭代算法。RLS算法可以使输出信号在最小二乘意义上尽可能接近期望信号,因为它可以选择自适应滤波器...

    学习常用算法之(4)递推法

    学习常用算法之递推法 递推法是一种常用的算法,用于解决某个特定问题。它是一组有限个规则,提供了解决问题的运算序列。在计算机科学中,递推法是一种重要的算法思想,它可以帮助我们解决复杂的问题。 递推法的...

Global site tag (gtag.js) - Google Analytics