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)个回文数。

  • 相关阅读:
    [MSDN] How to Debug a Release Build
    抽象成员 虚方法
    强制类型转换符 和 as 运算符
    一份超长的MySQL学习笔记
    Java反射基础
    c3p0config.xml
    一个JDBC封装工具类
    Spring5——IOC操作Bean管理(基于xml文件)
    Android游戏开发大全
    移除项目里的所有.svn命令
  • 原文地址:https://www.cnblogs.com/ltdjcoder/p/14911673.html
Copyright © 2011-2022 走看看