zoukankan      html  css  js  c++  java
  • P1996 约瑟夫问题-题解(队列??明明是单循环链好吗)

    一如既往的题目传送:     https://www.luogu.org/problemnew/show/P1996

    这里不讲数组模拟的方法(毕竟多做点题的模拟功力足以暴力出这道题),而是讲一种单循环链的做法。

    读一下题就能发现题目中线性循环的思想,且题目数据范围不大,便考虑用单循环链模拟计数:

    我们用数组来模拟这一链形结构:a[i]存放编号为i的节点的下一个节点的编号,(在本题中初始为a[1]=2,a[2]=3,...,a[n-1]=n,a[n]=1)这样每个节点都被上一个节点联系起来,所有节点就被“串成了一个循环链”,设j为指向当前报数节点的节点,当前报数节点即为a[j],当报数=m时,说明报数节点要离场,这是可让指着它的节点不再指它,而是指向它指向的节点,这样当前的报数节点就被整体的链给“驱逐”了。直到链的长度为0时,程序结束。

    附AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int a[101],n,m;
     5 int main()
     6 {
     7     cin>>n>>m;
     8     for(int i=1;i<n;i++)
     9         a[i]=i+1;
    10     a[n]=1;
    11     int j=n,p=0,k=1;//k为当前报数,p为离场(出圈)人数
    12     while(p<n)
    13     {
    14         while(k<m)
    15         {
    16             j=a[j];
    17             k++;
    18         }
    19         printf("%d ",a[j]);
    20         a[j]=a[a[j]];
    21         k=1;
    22         p++;
    23     }
    24     return 0;
    25 }
  • 相关阅读:
    日志组件一:Log4j
    HTTPS加密那点事--轻松秒懂HTTPS非对称加密
    图解Git
    Python 迭代器 & __iter__方法
    Fiddler 抓包工具总结
    Python使用struct处理二进制(pack和unpack用法)
    Python binascii
    常见证书格式及相互转换
    MyBatis Generator 详解
    MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
  • 原文地址:https://www.cnblogs.com/InductiveSorting-QYF/p/10699821.html
Copyright © 2011-2022 走看看