#P936. 【UR #29】人机验证

【UR #29】人机验证

这是一道交互题,且仅只支持 C++20 语言。

由于大量波特的涌入,跳蚤王国的社区面临博客质量低下的问题。现在你需要进行人机验证以证明你是人类。

人机验证的题目如下:

  • 对于一个函数 $f$,定义 $f_1(x)=f(x)$ and $f_n(x)=f(f_{n-1}(x))$。

  • 给定 $n,a,b$ 和集合 $S=\{1,2,\ldots,n\}$。统计有多少个 $f:S\to S$ 满足 $\forall x\in S,f_a(x)=f_b(x)$。答案对 $998244353$ 取模。

实现细节

在本题中,你可以以交互的形式调用 挑战多项式最优解 的多项式操作。

我们建议你使用以下的这些函数来进行多项式操作。为了调用以下这些函数,你需要引用头文件 #include "poly.h"

void fastmul(int *a, int *b, int *c, int n);

  • 设 $A(x)=\sum_{i=0}^{n}a_ix^i,B(x)=\sum_{i=0}^nb_ix^i$。
  • 这个函数会将 $c_{i}$($0 \le i \le n$) 赋值为 $[x^i]A(x)B(x)$。
  • 你需要保证 $a,b,c$ 的数组长度至少有 $n+1$ 且 $0\le a_i,b_i < 998244353$。

void fastexp(int *a, int *b, int n);

  • 设 $A(x)=\sum_{i=0}^{n}a_ix^i$。
  • 这个函数会将 $b_{i}$($0\le i\le n$) 赋值为 $[x^i]\exp A(x)$。
  • 你需要保证 $a,b$ 的数组长度至少有 $n+1$,$a_0=0$,且 $0\le a_i < 998244353$。

void fastln(int *a, int *b, int n);

  • 设 $A(x)=\sum_{i=0}^{n}a_ix^i$。
  • 这个函数会将 $b_{i}$($0\le i\le n$) 赋值为 $[x^i]\ln A(x)$。
  • 你需要保证 $a,b$ 的数组长度至少有 $n+1$,$a_0=1$,且 $0\le a_i < 998244353$。

void fastinv(int *a, int *b, int n);

  • 设 $A(x)=\sum_{i=0}^{n}a_ix^i$。
  • 这个函数会将 $b_{i}$($0\le i\le n$) 赋值为 $[x^i]\frac{1}{A(x)}$。
  • 你需要保证 $a,b$ 的数组长度至少有 $n+1$,$a_0\neq 0$,且 $0\le a_i < 998244353$。

附加文件中存在一个 poly.h 供选手在本地环境下编译和测试,但速度比实际评测时的交互库更慢。

3 1 3
19

在 $3^3=27$ 种方案中,只有 $[2,3,1],[3,1,2],[1,1,2],[1,3,1],[3,2,2],[2,2,1],[2,3,3],[3,1,3]$ 不满足条件。

7 3 7
489217

样例三~九

他们分别满足 $2,3,4,6,7,8,9$ 的限制。

数据范围

对于所有数据,保证 $1\le n,a,b\le 2\times 10^4$,$a\neq b$。

子任务编号 子任务分值 $n\leq$ 特殊性质
$1$ $5$ $7$ $a,b\le n$
$2$ $10$ $100$
$3$ $10$ $5\times 10^3$
$4$ $15$ $10^4$
$5$ $15$ $1.3 \times 10^4$
$6$ $10$ $1.6 \times 10^4$
$7$ $15$ $2\times 10^4$ $a,b\ge n-10$
$8$ $10$ $2\times 10^4$ $a,b\ge n-2000$
$9$ $10$ $2\times 10^4$

时间限制:$\texttt{5s}$

空间限制:$\texttt{1GB}$

提示

如果你引用了多项式操作,你可以通过自定义测试来测试你的程序的速度。

后记

由于你不会做这道题,你通过了人机验证。