logo AlgoBeat OnlineJudge
登录 注册

#215504. 【MX-X25-T7】『FeOI-5』三角晶体

内存限制:512 MiB 时间限制:2000 ms 标准输入输出
题目类型:VJudge(洛谷) 评测方式:VJudge
上传者: 匿名

题目描述

刚开始有一个三角形,每秒会出现一个点,它会等概率随机地和目前图形最外围的相邻某两个点连边。

所有点有标号,所有边都是无向边,边权为

输入 ,对于每个 求出图形生长到有恰好 个点后两点间最短路的长度的和的期望,对输入的质数 取模。

形式化题意:

无限大的二维平面上刚开始有一个三条无向边构成的三角形,即存在点 和边 。接下来第 秒:

  • 等概率随机选择图形外圈(与无限远处在同一个块里)的一条无向边
  • 在该边外侧(无限远处所在的块)中建立点
  • 连接无向边 和无向边

输入 ,对于每个 求出 秒后所有无序点对之间最短路的长度的和的期望值,对输入的质数 取模。

输入格式

第一行两个整数

输出格式

为避免输出量过大,输出一行一个整数表示 的所有答案的异或和。

样例

样例输入 1

4 998244353

样例输出 1

7

样例输入 2

10 1000000007

样例输出 2

67634987

数据范围与提示

【样例 1 解释】

此时共有三种情况:

不难发现每种情况下最短路总和都是 ,故期望为

【样例 2 解释】

的答案依次为:

7
13
800000027
800000038
190476238
138095302
124338708

【数据范围】

对于所有测试数据,,保证 是质数。

子任务编号 分数

【提示】

建议选手使用这份 std 使用的快速取模模板以减小常数因子:

typedef __int128_t lll;
typedef unsigned long long ull;
struct FastMod{ull b, m;
	inline void init(ull x){b = x, m = ((lll)1 << 64) / b;}
	inline ull Mod(ull a){
		ull q = ull((lll)m * a >> 64);
		ull r = a - q * b;
		return r >= b ? r - b : r;
	}
}md;