UOJ Logo Universal Online Judge

UOJ

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

附件下载 统计

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

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

人机验证的题目如下:

  • 对于一个函数 f,定义 f1(x)=f(x) and fn(x)=f(fn1(x))

  • 给定 n,a,b 和集合 S={1,2,,n}。统计有多少个 f:SS 满足 xS,fa(x)=fb(x)。答案对 998244353 取模。

实现细节

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

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

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

  • A(x)=i=0naixi,B(x)=i=0nbixi
  • 这个函数会将 ci0in) 赋值为 [xi]A(x)B(x)
  • 你需要保证 a,b,c 的数组长度至少有 n+10ai,bi<998244353

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

  • A(x)=i=0naixi
  • 这个函数会将 bi0in) 赋值为 [xi]expA(x)
  • 你需要保证 a,b 的数组长度至少有 n+1a0=0,且 0ai<998244353

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

  • A(x)=i=0naixi
  • 这个函数会将 bi0in) 赋值为 [xi]lnA(x)
  • 你需要保证 a,b 的数组长度至少有 n+1a0=1,且 0ai<998244353

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

  • A(x)=i=0naixi
  • 这个函数会将 bi0in) 赋值为 [xi]1A(x)
  • 你需要保证 a,b 的数组长度至少有 n+1a00,且 0ai<998244353

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

样例一

input

3 1 3

output

19

explanation

33=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] 不满足条件。

样例二

input

7 3 7

output

489217

样例三~九

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

数据范围

对于所有数据,保证 1n,a,b2×104ab

子任务编号 子任务分值 n 特殊性质
1 5 7 a,bn
2 10 100
3 10 5×103
4 15 104
5 15 1.3×104
6 10 1.6×104
7 15 2×104 a,bn10
8 10 2×104 a,bn2000
9 10 2×104

时间限制:5s

空间限制:1GB

提示

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

后记

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