念东剑·念念不忘
念东剑·念念不忘
题目描述
念东剑,是霍雨浩用尽半生念力所铸的一柄剑。它无锋、无锷、无鞘,却承载着他这一生最深的思念。
传闻在铸剑的那一夜,他将他与唐舞桐一同走过的每一个重要时刻——初见的宿舍、并肩的战场、离散的谷地、重逢的湖泊——都封入了剑心。每一段记忆化为一个点,散落在念东剑的意识之海中。
若要将剑鸣真正贯通,就要让一道贯穿始终的剑意直线,从这些散落的记忆中笔直穿过。可是这些记忆里有确凿之事、也有模糊之影:有些时刻的深浅,甚至连他自己也无法完全确认——只能给出一个大致的区间。
“念念不忘,必有回响。”
他要问的是:在所有可能的记忆图景之下,那道最贴近所有点的剑意直线所留下的总遗憾——期望能有多小?
念东剑封存了 $n$ 段记忆,第 $i$ 段记忆发生在时刻 $t_i$,这是一个确凿无疑的时刻。而这段记忆在霍雨浩心中留下的刻痕深浅 $w_i$,却已被岁月磨得模糊:他只能确认,那份深浅是介于 $l_i$ 与 $r_i$ 之间的某个正整数,且落在区间内每一个整数上的可能是均匀分布的,各段记忆之间彼此独立。
他要让一道剑意直线 $f(t) = at + b$ 从这些记忆点 $(t_i, w_i)$ 中笔直穿过。对于任意一条直线,他所背负的总遗憾定义为每一段记忆与剑意直线之间偏差的平方之和(即残差平方和 RSS)。
$$
\operatorname{RSS}(a, b) = \sum_{i=1}^n \bigl(f(t_i) - w_i\bigr)^2
$$
当 $w_1, \dots, w_n$ 被一次具体地“想起”之后,他总能挑出最贴近所有记忆的那条剑意直线,将总遗憾降到最低:
$$
X = \min_{a, b \in \mathbb{R}} \operatorname{RSS}(a, b)
$$
随着记忆深浅 $w_1, \dots, w_n$ 的随机取值,$X$ 本身也是一个随机变量。
“念念不忘,必有回响。” 请你替他求出这份最小总遗憾的期望 $\mathbb{E}[X]$,答案对 $998244353$ 取模。
输入描述
第一行一个正整数 $n$,表示念东剑封存的记忆段数。
接下来 $n$ 行,每行三个正整数 $t_i, l_i, r_i$,分别表示第 $i$ 段记忆的时刻,以及这段记忆刻痕深浅的下界与上界。
保证时刻严格递增,即 $t_i < t_{i+1} \left(1 \le i < n\right)$,并且:
$$
n \cdot \sum_{i=1}^{n} t_i^2 \ne \left( \sum_{i=1}^{n} t_i \right)^2 \pmod{998244353}
$$
即保证答案(剑意直线不退化为竖直线)在模 $998244353$ 意义下一定存在。
输出描述
输出一行一个整数,表示最小总遗憾的期望 $\mathbb{E}[X] \bmod 998244353$。
示例1
输入
4
2 3 3
4 7 7
6 10 10
8 15 15
输出
99824436
说明
所有 $l_i = r_i$,四段记忆的刻痕深浅唯一确定,念东剑无需在朦胧中揣度。此时的四个记忆点 $(2, 3), (4, 7), (6, 10), (8, 15)$ 已然清清楚楚,最贴近它们的剑意直线为 $f(t) = \frac{11}{6} \cdot t + \frac{1}{3}$,所留下的最小总遗憾为 $\frac{7}{10}$,在模 $998244353$ 意义下即为 $99824436$。
备注
对于全部数据,念东剑封存的记忆满足 $2 \le n \le 5 \times 10^5, 1 \le t_i \le 10^8, 1 \le l_i \le r_i \le 10^8, t_i < t_{i+1}$,且 $n \cdot \sum_{i=1}^{n} t_i^2 \ne \left( \sum_{i=1}^{n} t_i \right)^2 \pmod{998244353}$。
解题思路
还有机器学习的事.jpg。以下推导部分参考的 Gemini 3.1 Pro。
为了计算 $X$ 的期望 $\mathbb{E}[X]$,需要先求出 $X$ 的解析表达式。定义损失函数 $L(a,b) = \sum\limits_{i=1}^{n}{\left(a t_i + b - w_i\right)^2}$,由最小二乘法可知,使 $L(a,b)$ 取得最小值的 $a, b$ 应满足 $L$ 关于 $a, b$ 的偏导数同时为零。先令 $\dfrac{\partial L}{\partial b} = 2\sum\limits_{i=1}^{n}{\left(at_i+b-w_i\right)} = 0$,整理可得 $$a \sum\limits_{i=1}^{n}{t_i} + n b = \sum\limits_{i=1}^{n}{w_i} \,\Longrightarrow\, b = \frac{1}{n} \left(\sum\limits_{i=1}^{n}{w_i} - a \sum\limits_{i=1}^{n}{t_i}\right)$$
记 $\bar{t} = \dfrac{1}{n}\sum\limits_{i=1}^{n}{t_i}$、$\bar{w} = \dfrac{1}{n}\sum\limits_{i=1}^{n}{w_i}$,上式即为 $b = \bar{w} - a \bar{t}$。再令 $\dfrac{\partial L}{\partial a} = 2 \sum\limits_{i=1}^{n}{\left(a t_i + b - w_i\right) t_i} = 0$,整理可得 $a\sum\limits_{i=1}^{n}{t_i^2} + b\sum\limits_{i=1}^{n}{t_i} = \sum\limits_{i=1}^{n}{t_iw_i}$。将 $b = \bar{w} - a \bar{t}$ 代入,得 $$
\begin{align*}&\; a \sum\limits_{i=1}^{n}{t_i^2} + \left(\bar{w} - a \bar{t}\right) \sum\limits_{i=1}^{n}{t_i} = \sum\limits_{i=1}^{n}{t_i w_i} \\ \Rightarrow&\; a \left(\sum\limits_{i=1}^{n}{t_i^2} - \bar{t} \sum\limits_{i=1}^{n}{t_i}\right) = \sum\limits_{i=1}^{n}{t_i w_i} - \bar{w} \sum\limits_{i=1}^{n}{t_i} \\ \Rightarrow&\; a \left(\sum\limits_{i=1}^{n}{t_i^2} - n \bar{t}^2 \right) = \sum\limits_{i=1}^{n}{t_i w_i} - n \bar{t} \bar{w} \\ \Rightarrow&\; a \sum\limits_{i=1}^{n}{\left(t_i^2 - \bar{t}^2\right)} = \sum\limits_{i=1}^{n}{\left(t_i w_i - \bar{t} \bar{w}\right)} \end{align*}$$
注意到 $$ \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)^2} = \sum\limits_{i=1}^{n}{t_i^2} - 2 \bar{t}\sum\limits_{i=1}^{n}{t_i} + n\bar{t}^2 = \sum\limits_{i=1}^{n}{t_i^2} - 2n \bar{t}^2 + n \bar{t}^2 = \sum\limits_{i=1}^{n}{\left(t_i^2 - \bar{t}^2\right)} $$$$\sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)\left(w_i - \bar{w}\right)} = \sum\limits_{i=1}^{n}{t_i w_i} - \bar{w} \sum\limits_{i=1}^{n}{t_i} - \bar{t} \sum\limits_{i=1}^{n}{w_i} + n\bar{t} \bar{w} = \sum\limits_{i=1}^{n}{t_i w_i} - 2n \bar{t} \bar{w} + n \bar{t} \bar{w} = \sum\limits_{i=1}^{n}{\left(t_i w_i - \bar{t} \bar{w}\right)}$$
将两式代入前面的等式,得到 $$a \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)^2} = \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)\left(w_i - \bar{w}\right)}$$
记 $S_{tt} = \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)^2}$、$S_{tw} = \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)\left(w_i - \bar{w}\right)}$,由于题目保证 $S_{tt} \ne 0$,故 $a = \dfrac{S_{tw}}{S_{tt}}$。再记 $S_{ww} = \sum\limits_{i=1}^{n}{\left(w_i - \bar{w}\right)^2}$,将 $a = \dfrac{S_{tw}}{S_{tt}}$ 与 $b = \bar{w} - \dfrac{S_{tw}}{S_{tt}} \bar{t}$ 代回 $L(a,b)$,即可求出损失函数的最小值 $$
\begin{align*}L(a,b) &= \sum\limits_{i=1}^{n}{\left(\frac{S_{tw}}{S_{tt}} t_i + \bar{w} - \frac{S_{tw}}{S_{tt}} \bar{t} - w_i\right)^2} \\ &= \sum\limits_{i=1}^{n}{\left(\frac{S_{tw}}{S_{tt}} \left(t_i - \bar{t}\right) - \left(w_i - \bar{w}\right)\right)^2} \\ &= \left(\frac{S_{tw}}{S_{tt}}\right)^2 \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)^2} - 2\frac{S_{tw}}{S_{tt}} \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)\left(w_i - \bar{w}\right)} + \sum\limits_{i=1}^{n}{\left(w_i - \bar{w}\right)^2} \\ &= \frac{S_{tw}^2}{S_{tt}} - 2\frac{S_{tw}^2}{S_{tt}} + S_{ww} \\ &= S_{ww} - \frac{S_{tw}^2}{S_{tt}} \end{align*}$$
因此最小残差平方和为 $X = \min\limits_{a,b}{L(a,b)} = S_{ww} - \dfrac{S_{tw}^2}{S_{tt}}$。由于 $t_i$ 是固定的常数,因此 $S_{tt}$ 也是一个确定的常数;而 $w_1,\dots,w_n$ 是相互独立的随机变量,由期望的线性性质有 $$\mathbb{E}[X] = \mathbb{E}[S_{ww}] - \frac{1}{S_{tt}}\mathbb{E}[S_{tw}^2]$$
下面分别求出 $\mathbb{E}[S_{ww}]$ 与 $\mathbb{E}[S_{tw}^2]$。将 $S_{ww}$ 展开,有 $$S_{ww} = \sum\limits_{i=1}^{n}{\left(w_i - \bar{w}\right)^2} = \sum\limits_{i=1}^{n}{w_i^2} - 2\bar{w} \sum\limits_{i=1}^{n}{w_i} + n \bar{w}^2 = \sum\limits_{i=1}^{n}{w_i^2} - n \bar{w}^2$$
由期望的线性性质,$\mathbb{E}[S_{ww}] = \sum\limits_{i=1}^{n}{\mathbb{E}[w_i^2]} - n\, \mathbb{E}[\bar{w}^2]$。再由方差的定义 $\mathbb{E}[w_i^2] = \mathrm{Var}(w_i) + \mathbb{E}^2[w_i]$、$\mathbb{E}[\bar{w}^2] = \mathrm{Var}(\bar{w}) + \mathbb{E}^2[\bar{w}]$。由于 $w_i$ 相互独立,进一步有 $$\begin{align*}
\mathbb{E}[\bar{w}^2] &= \mathrm{Var}(\bar{w}) + \mathbb{E}^2[\bar{w}] \\ &= \mathrm{Var}\left(\frac{1}{n}\sum\limits_{i=1}^{n}{w_i}\right) + \mathbb{E}^2\left[\frac{1}{n}\sum\limits_{i=1}^{n}{w_i}\right] \\ &= \frac{1}{n^2}\sum\limits_{i=1}^{n}{\mathrm{Var}(w_i)} + \frac{1}{n^2}\left(\sum\limits_{i=1}^{n}{\mathbb{E}[w_i]}\right)^2 \end{align*}$$
将上式代入 $\mathbb{E}[S_{ww}]$,合并同类项后即得 $$\begin{align*}\mathbb{E}[S_{ww}] &= \sum\limits_{i=1}^{n}{\mathbb{E}[w_i^2]} - n\, \mathbb{E}[\bar{w}^2] \\ &= \sum\limits_{i=1}^{n}{\left(\mathrm{Var}(w_i) + \mathbb{E}^2[w_i]\right)} - \frac{1}{n}\sum\limits_{i=1}^{n}{\mathrm{Var}(w_i)} - \frac{1}{n}\left(\sum\limits_{i=1}^{n}{\mathbb{E}[w_i]}\right)^2 \\ &= \frac{n-1}{n}\sum\limits_{i=1}^{n}{\mathrm{Var}(w_i)} + \sum\limits_{i=1}^{n}{\mathbb{E}^2[w_i]} - \frac{1}{n}\left(\sum\limits_{i=1}^{n}{\mathbb{E}[w_i]}\right)^2 \end{align*}$$
再将 $S_{tw}$ 展开 $$S_{tw} = \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)\left(w_i - \bar{w}\right)} = \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right) w_i} - \bar{w} \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)} = \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right) w_i} - \bar{w}\left(n\bar{t}-n\bar{t}\right) = \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right) w_i}$$
同样根据方差的定义以及 $w_i$ 之间的独立性,有 $$\begin{align*}\mathbb{E}[S_{tw}^2] &= \mathrm{Var}(S_{tw}) + \mathbb{E}^2[S_{tw}] \\&= \mathrm{Var}\left(\sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right) w_i}\right) + \mathbb{E}^2\left[\sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right) w_i}\right] \\ &= \sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)^2\mathrm{Var}\left(w_i\right)} + \left(\sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right) \mathbb{E}[w_i]}\right)^2 \end{align*}$$
将 $\mathbb{E}[S_{ww}]$ 与 $\mathbb{E}[S_{tw}^2]$ 代入 $\mathbb{E}[X]$,便得到 $$\large{\boldsymbol{\mathbb{E}[X] = \frac{n-1}{n}\sum\limits_{i=1}^{n}{\mathrm{Var}(w_i)} + \sum\limits_{i=1}^{n}{\mathbb{E}^2[w_i]} - \frac{1}{n}\left(\sum\limits_{i=1}^{n}{\mathbb{E}[w_i]}\right)^2 - \frac{1}{S_{tt}}\left(\sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right)^2 \mathrm{Var}\left(w_i\right)} + \left(\sum\limits_{i=1}^{n}{\left(t_i - \bar{t}\right) \mathbb{E}[w_i]}\right)^2\right)}}$$
至此只需求出每个 $w_i$ 的期望与方差,代入上式即可。由于 $w_i$ 在整数区间 $[l_i,r_i]$ 上服从离散均匀分布,其期望为 $$\mathbb{E}[w_i] = \frac{1}{r_i-l_i+1}\sum\limits_{j=l_i}^{r_i}{j} = \frac{1}{r_i-l_i+1} \cdot \frac{(r_i-l_i+1)(l_i+r_i)}{2} = \frac{l_i+r_i}{2}$$
其二阶矩为 $$\begin{align*}\mathbb{E}[w_i^2] &= \frac{1}{r_i-l_i+1}\sum\limits_{j=l_i}^{r_i}{j^2} \\ &= \frac{1}{r_i-l_i+1}\sum\limits_{j=0}^{r_i-l_i}{(l_i+j)^2} \\ &= \frac{1}{r_i-l_i+1}\left((r_i-l_i+1)l_i^2 + 2l_i\sum_{j=0}^{r_i-l_i}{j}+\sum_{j=0}^{r_i-l_i}{j^2}\right)\\ &= l_i^2 + l_i(r_i-l_i) + \frac{(r_i-l_i)\left(2(r_i-l_i) + 1\right)}{6} \\ &= l_i r_i + \frac{(r_i-l_i)\left(2(r_i-l_i) + 1\right)}{6}\end{align*}$$
再利用恒等式 $4l_ir_i=(l_i+r_i)^2-(l_i-r_i)^2$ 继续配凑 $$\begin{align*}\mathbb{E}[w_i^2] &= \frac{(l_i+r_i)^2-(l_i-r_i)^2}{4} + \frac{(r_i-l_i)\left(2(r_i-l_i) + 1\right)}{6} \\ &= \frac{(l_i+r_i)^2}{4} + \frac{(r_i-l_i)(4r_i-4l_i+2-3r_i+3l_i)}{12} \\ &= \left(\frac{l_i+r_i}{2}\right)^2 + \frac{(r_i-l_i)(r_i-l_i+2)}{12} \\ &= \left(\frac{l_i+r_i}{2}\right)^2 + \frac{(r_i-l_i+1)^2 - 1}{12} \end{align*}$$
于是由方差公式 $\mathrm{Var}(w_i) = \mathbb{E}[w_i^2] - \mathbb{E}^2[w_i]$ 可得 $$\mathrm{Var}(w_i) = \left(\frac{l_i+r_i}{2}\right)^2 + \frac{(r_i-l_i+1)^2 - 1}{12} - \left(\frac{l_i+r_i}{2}\right)^2 = \frac{(r_i-l_i+1)^2 - 1}{12}$$
将 $\mathbb{E}[w_i]$ 与 $\mathrm{Var}(w_i)$ 代入 $\mathbb{E}[X]$,即可求出最终答案。
AC 代码如下,时间复杂度为 $O(n + \log{\text{mod}})$:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 5e5 + 5, mod = 998244353;
int t[N], l[N], r[N];
int qmi(int a, int k) {
int ret = 1;
while (k) {
if (k & 1) ret = 1ll * ret * a % mod;
a = 1ll * a * a % mod;
k >>= 1;
}
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
int t_bar = 0;
for (int i = 0; i < n; i++) {
cin >> t[i] >> l[i] >> r[i];
t_bar = (t_bar + t[i]) % mod;
}
t_bar = 1ll * t_bar * qmi(n, mod - 2) % mod;
LL s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, stt = 0;
for (int i = 0; i < n; i++) {
LL m = r[i] - l[i] + 1, v = (m * m % mod - 1) * 582309206 % mod;
s1 = (s1 + v) % mod;
LL e = (l[i] + r[i]) * 499122177ll % mod;
s2 = (s2 + e * e) % mod;
s3 = (s3 + e) % mod;
LL d = t[i] - t_bar;
s4 = (s4 + d * d % mod * v) % mod;
s5 = (s5 + d * e) % mod;
stt = (stt + d * d) % mod;
}
s1 = s1 * (n - 1) % mod * qmi(n, mod - 2) % mod;
s3 = -s3 * s3 % mod * qmi(n, mod - 2) % mod;
stt = qmi(stt, mod - 2);
s4 = -s4 * stt % mod;
s5 = -s5 * s5 % mod * stt % mod;
cout << ((s1 + s2 + s3 + s4 + s5) % mod + mod) % mod;
return 0;
}
参考资料
河南萌新联赛2026第(五)场:信息工程大学:https://ac.nowcoder.com/acm/contest/139416
本文来自博客园,作者:onlyblues,转载请注明原文链接:https://www.cnblogs.com/onlyblues/p/22565794

浙公网安备 33010602011771号