题目 20358

Seat

查看题解 ↗GitHub ↗如何评测
题号
20358
标签
比赛NOIP
来源
2018 国庆雅礼集训 10-7

Seat

seat.cpp/in/out

  • 时间限制:1.0s
  • 空间限制:512MB

题目描述

有 n+2n + 2 个座位等距地排成一排,从左到右编号为 00 至 n+1n + 1。

最开始时 0 号以及 n+1n + 1 号座位上已经坐了一个小 G,接下来会有 nn 个小 G 依次找一个空座位坐下。由于小 G 们坐得太近就容易互相搏弈,每个小 G 会找一个当前离最近的小 G 距离最远的座位坐下。如果有多个备选的座位,这个小 G 会等概率选择其中一个。

给出 nn,求第 ii 个坐下的小 G 坐在 jj 号座位的概率,对 PP 取模。具体来说,如果答案化为最简分数可以表示为 ab\frac{a}{b},你需要输出 a×b−1a \times b^{-1},其中 b−1=bP−2(modP)b^{-1} = b^{P-2} \pmod P。

输入格式

从文件 seat.in 中读入数据。

一行两个整数 n,Pn, P。

输出格式

输出到文件 seat.out 中。

输出 nn 个整数,第 ii 行第 jj 个整数表示第 ii 个小 G 坐在第 jj 个座位的概率。

样例 1 输入

文本
4 10007

样例 1 输出

文本
0 5004 5004 0
3336 1668 1668 3336
3336 1668 1668 3336
3336 1668 1668 3336

样例 1 解释

第一个小 G 会在中间两个位置中随机选择一个,接下来无论选哪个位置最近的距离都是 1。

12=5004(mod10007)\frac{1}{2} = 5004 \pmod{10007},13=3336(mod10007)\frac{1}{3} = 3336 \pmod{10007},16=1668(mod10007)\frac{1}{6} = 1668 \pmod{10007}。

样例 2

见选手目录下的 seat/seat2.in 与 seat/seat2.ans。

数据范围

对于所有数据,满足 2≤n≤10242 \le n \le 1024,2000≤P≤300002000 \le P \le 30000,PP 是质数。本题共 25 个测试点,每个测试点 4 分。

测试点编号 nn
1 =1=1
2 =2=2
3, 4 ≤10\le 10
5, 6 ≤20\le 20
7, 8 ≤32\le 32
9, 10 ≤48\le 48
11, 12 ≤64\le 64
13 ≤80\le 80
14 ≤100\le 100
15 =127=127
16, 17, 18, 19, 20 ≤300\le 300
21 =511=511
22 =1023=1023
23, 24, 25 ≤1024\le 1024

数据下载

题目 20358 的公开数据

正在读取文件列表…

常用命令

题目 20358 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。