1 条题解

  • 0
    @ 2025-8-24 23:17:29

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar WorldMachine
    请引领我至夜晚熠熠闪烁的群星之下

    搬运于2025-08-24 23:17:29,当前版本为作者最后更新于2025-06-04 21:51:43,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    几个人一起做的,贡献了一个多项式板子和部分分数。

    做题顺序:1 2 3 4 5 6 7 9 11 16 19 20 10 15 14 13 12 8 17 18

    151\sim5 Binary

    这几个点的输出都是 nn 个整数。

    随便输入几个数据,发现答案的第 ii 位只和 ai,bia_i,b_i 有关。猜几个常见的二元运算,很容易发现这五个点对应的二元运算分别为 +,,xor,or,and+,-,\text{xor},\text{or},\text{and}

    66 Multiply

    本来想着会不会有多项式操作,结果还真有啊。

    输出 2n12n-1 个数,发现答案就是序列 aabb 的卷积。将 aabb 当成两个多项式乘起来输出就行了,注意下标从 00 开始,要写 NTT。

    还有一个问题是模数取多少,猜测是 998244353998244353,然后就对了。

    77 Inverse

    输出 2n2n 个数,看起来毫无头绪啊。但由于 prog.exe 要求了 b0=1b_0=1,猜测大概是 inv\text{inv} 或者 ln\ln 这类东西。

    固定 b0=1b_0=1,其它都为 00,发现得到的多项式就是 aa 本身;固定 a0=1a_0=1,其它都为 00,发现得到的多项式就是 bb 的乘法逆。再多试几个,猜测答案为 ab1a\cdot b^{-1},就过了。

    注意次数要补到 2n12n-1

    88 Cbrt

    输出 2n2n 个数。

    随便试几组数据,发现答案和 bb 无关。

    尝试 1x1-x,得到了一列以 A004117 为分子,以 A067623 为分母的数(当然是在模 998244353998244353 意义下给出的,原数得自己猜),也就是 1x3\sqrt[3]{1-x}。猜测需要多项式开立方根。

    做法就是把 aa 做多项式 ln\ln 之后每一项乘上 13\dfrac13exp\exp 回去,虽然 exp\exp 常数不轻但还是能过的。

    还是要注意次数要补到 2n12n-1

    99 Compound

    输出 nn 个数。

    发现 aabb 都是排列。尝试 bi=ib_i=i,发现答案就是 aa 本身;尝试 bi=ni+1b_i=n-i+1,发现答案是 aa 翻转后的结果。那么答案就是输出 abia_{b_i}

    101110\sim11 Sort

    输出 nn 个数。

    首先发现答案和 bb 无关,并且 aa 现在不一定是排列了。

    先说第 1010 个点。尝试 aa 为排列的情况,发现第 ii 位就是数 iiaa 中出现的位置。

    猜测按 aia_i 为第一关键字、ii 为第二关键字排序,答案的第 ii 位就是排序后第 ii 小的数在原序列中的下标。

    对于第 1111 个点,发现其答案就是第 1010 个点的答案的排列的逆。

    1212 Order

    输出 11 个数。

    答案还是和 bb 无关,先尝试 aa 为排列的情况。

    n=5n=5 的所有排列打一个,答案为 161\sim 6 的排列个数分别为 1,25,20,30,24,201,25,20,30,24,20,即 A057731 的第五行。

    因此所求即为输入置换的阶,即每个轮换大小的 lcm\text{lcm}

    首先,当输入数据不是一个排列的时候,需要将其按 aia_i 为第一关键字、ii 为第二关键字离散化成排列再做。

    其次,答案可能很大,是 O(enlnn)\mathcal O\left(e^{\sqrt{n\ln n}}\right) 级别的(见此),所以要么取模,要么需要高精度。试了几个模数都不对,那就是不取模了。

    不想写高精度怎么办?注意到这是一道提交答案题,那就把每个轮换大小输出出来,再丢到 python 里求 lcm\text{lcm} 即可。随机置换的轮换个数期望是调和级数的,可以接受。

    1313 Distance

    输出一个两位小数。

    首先尝试 n=2n=2 的情况,发现就是以 aa 为横坐标、以 bb 为纵坐标的两个点的距离。

    尝试 nn 更大的情况,可以发现答案就是编号相邻的每对点的距离之和。

    1414 Variance

    输出一个两位小数。

    首先观察到答案只和 aibia_i-b_i 有关,并且所有数乘以 kk 后,答案乘以 k2k^2;所有 aia_i 加上 kk 后,答案不变。

    具有如上性质的东西在统计学中比比皆是,猜测是总体方差,然后就过了。

    1515 Linear

    输出格式很神奇,给出了 kkbb 两个两位小数,那应该是一个一次函数。

    那么猜测输入给出的应该是平面直角坐标系上的 nn 个点,自然想到线性回归,使用最小二乘法求解即可。

    1616 Matrix

    输出一个 0101 矩阵。

    bb 全为 00,发现只输出一列,从 aa 中最小值到最大值,如果一个值在 aa 中出现过则为 11,否则为 00

    考虑一般情况,会输出一个矩阵,每一行从 bb 中最小值到最大值,对于 (i,j)(i,j),如果存在一个 kk 使得 ak=i,bk=ja_k=i,b_k=j,那么该位置就为 11,否则为 00

    1717 Area

    输出一个两位小数。

    根据前面的经验,给出的应该还是平面上的 nn 个点。

    对于 n=2n=2,不管怎样输出都为 00。对于 n=3n=3,发现答案刚好为这三个点围成的三角形面积。

    猜想和面积有关,但这 nn 个点按照给出顺序甚至不一定能围成一个简单多边形,猜测答案为这 nn 个点的凸包的面积,用 Andrew 算法求解即可。

    1818 Sqrt

    输出 2n2n 个数。

    还是多项式题,答案和 bb 无关。

    观察前几项可以发现答案的平方恰好为 aa,多项式开根即可。

    还是要注意次数要补到 2n12n-1

    1919 Nim

    输出 Win! 或者 Lose!

    猜想和博弈论有关,比如 Nim 博弈。因为答案和 a,ba,b 都有关,猜测是把 a,ba,b 中的每个数异或起来,如果不为 00 则输出 Win!,否则输出 Lose!

    还有一种做法,因为输出要么是 Win! 要么是 Lose!,尝试最多两次即可。

    2020 Easy

    输出 2n2n 个数。

    发现把两个序列拼接起来就是答案。

    完整代码见此。

    123asdf123 Enoch006 流水行船CCD Orz Orz Orz

    • 1