zoukankan      html  css  js  c++  java
  • 回文串性质研究 & NIT的数

    在玩oeis的时候,我发现了一个很有意思的东西
    image
    机翻(
    image

    什么意思呢?就是可以在接近(O(1))的时间内得到一个回文数字在回文序列中的位置(就是它是第几个回文数字)
    具体来说:
    对于长度为偶数的:取前半部分,在最前面添上1。例如 98766789, 取 9876 添上 1, 所以它是第 19876个回文数。
    对于长度为奇数的:取前半部分和之间的数, 最高位加一,例如 515 取 51, 5加一, 所以它是第61个回文数。

    (事实上稍加证明就可以得到这个结论, 具体思路就是找小于N的回文数有多少个,然后发现可以把一个回文数拆成两部分, 枚举前一半就可以得到新的回文数。)

    tql!这样我们可以快速判断一个回文数的位置, 从而进行二分等操作, 找到符合要求的回文数。

    当然, 我们可以将上面的算法反过来(即求第x个回文数是什么),这样会更方便
    (考场代码就不放了吧)
    (具体就是判断x第一位是不是1, 如果不是说明长度是奇数, 是的话如果第二位是零的话长度还是奇数, 否则长度是偶数, 接下来分开模拟即可)
    (不懂仔细思考即可)

    这就是nowcoder NIT的数的解法, 写出上面的东西,然后二分即可。
    具体的说, 二分找到大于n的第一个回文数, 假设它是第x个, 那么答案就是(x+k-1)个回文数。

  • 相关阅读:
    UVA Live Achrive 4327 Parade (单调队列,dp)
    从磁盘读取一个文件到内存中,再打印到控制台
    二分查找法
    日期:Date
    线程与进程
    泛型基本知识
    泛型
    Map集合的遍历方式:
    Arrays
    Set接口
  • 原文地址:https://www.cnblogs.com/ltdjcoder/p/14911673.html
Copyright © 2011-2022 走看看