当前位置: 首页 > news >正文

ABC 450G - Random Subtraction 题解

Link

首先最后的 \(x\) 一定是 \(\sum\limits_{i=1}^{n} op_iA_i\) 的形式,其中 \(op_i \in \{-1,1\}\)

那么 \(E(x^2)=E(\sum\limits_{i=1}^{n} op_iA_i)=E(\sum\limits_{i=1}^{n}A_i^2)+2\sum\limits_{i=1}^{n}\sum\limits_{j=1,j\ne i}^{n}E(op_iop_jA_iA_j)\)

以下将 \(E(op_iop_jA_iA_j)\) 简称为 \(E(i,j)\)

发现两堆合并的本质是将两两之间的内部元素之间构成的乘积形式进行翻转(\(-1\) 变成 \(1\)\(1\) 变成 \(-1\)),那么考虑在第 \(i\) 次操作中,我们钦定的 \(u\)\(v\) 两个如何合并。

\(dp_{i,0/1}\) 表示在第 \(i\) 次操作中,我们目前对已经钦定的两个数已经做了奇数次或者偶数次操作的概率是多少。

考虑转移。

Operation 1 不做任何操作

\[dp_{i,j}=dp_{i-1,j}\times \frac{n-i-1}{n-i+1} \]

Operation 2 将其中一个合并在另外一个堆中

\[dp_{i,j}=dp_{i-1,1-j}\times \frac{2(n-i-1)}{(n-i+1)(n-i)} \]

Operation 3 将钦定的两个合并

那么之后两者不会有任何贡献变化。

\[ans_{1-j}=dp_{i-1,j}\times \frac{1}{(n-i-1)(n-i)} \]

然后最后统计答案就是 \(\sum\limits_{i=1}^{n} a[i](sum-a[i])(ans_0-ans_1)\)

Code

#include <bits/stdc++.h>
#define FASTIO ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int Md = 998244353;
const int N = 2e5 + 5;
int a[N], n;
ll dp[N][2], inv[N], cnt[2];
void init(void) {inv[0] = inv[1] = 1;for (int i = 2; i < N; ++i)inv[i] = (Md - (Md / i) * inv[Md % i] % Md) % Md;
}
void trans(ll& x, ll y) {x = (x + y) % Md;
}
int main() {FASTIO;cin >> n;for (int i = 1; i <= n; ++i) cin >> a[i];ll ret = 0, sum = 0;for (int i = 1; i <= n; ++i) trans(sum, a[i]);init();for (int i = 1; i <= n; ++i)ret = (ret + (1ll * a[i]) * a[i] % Md) % Md;dp[0][0] = 1;for (int i = 1; i < n - 1; ++i) {for (int j = 0; j < 2; ++j) {trans(dp[i][j], dp[i - 1][j] * inv[n - i + 1] % Md * (n - i - 1) % Md);trans(dp[i][j], 2ll * dp[i - 1][j ^ 1] % Md * inv[n - i + 1] % Md * (n - i - 1) % Md * inv[n - i] % Md);}}for (int i = 0; i < n - 1; ++i) {trans(cnt[0], 2ll * dp[i][1] % Md * inv[n - i] % Md * inv[n - i - 1] % Md);trans(cnt[1], 2ll * dp[i][0] % Md * inv[n - i] % Md * inv[n - i - 1] % Md);}for (int i = 1; i <= n; ++i) {ll other = (sum - a[i] + Md) % Md;trans(ret, a[i] * other % Md * ((cnt[0] - cnt[1]) % Md + Md) % Md);}cout << ret << '\n';return 0;
}
http://www.jsqmd.com/news/519085/

相关文章:

  • 降AI工具的风格迁移技术是什么意思?通俗解读背后的原理 - 还在做实验的师兄
  • springboot基于vue美剧观影点评网站的设计与实现
  • 深入理解OPTIONS请求:跨域预检的机制与实践
  • 嘎嘎降AI手机端怎么用?不带电脑也能降AI的完整教程 - 还在做实验的师兄
  • 从EDKII编译到Flash烧录:深入理解UEFI固件FDF文件如何塑造FD/FV层级
  • 嘎嘎降AI普通模式vs深度改写模式:什么情况该用哪个 - 还在做实验的师兄
  • 2026年艺术类论文降AI率工具实测:设计和美术方向哪款最合适 - 还在做实验的师兄
  • vue+python智能医疗辅助系统的
  • 2026年各检测平台AI率标准差异解读:同一篇论文为什么结果不同 - 还在做实验的师兄
  • 基于AI微信小程序的心理咨询预约系统_ohyab8bm
  • UniApp H5微信授权登录实战:如何优雅处理回调页面与用户信息获取
  • Vue项目依赖离线化实战:从外网到内网Nexus仓库的完整迁移指南
  • 如何让降AI后的论文读起来更自然?5个人工润色小技巧 - 还在做实验的师兄
  • 新手别怕!用‘东北天’和‘右前上’坐标系,5分钟搞懂惯性导航姿态矩阵(含Python验证代码)
  • AT_arc209_c [ARC209C] Adjusting a Rectangle
  • 嘎嘎降AI和学术大师哪个适合硕士论文?维普实测数据说话 - 还在做实验的师兄
  • 高德地图行政区划聚合功能避坑指南:为什么你的setFitView总是不生效?
  • 2026年土木工程论文降AI率工具推荐:公式多专业术语多也不怕 - 还在做实验的师兄
  • 陪诊师入行,经验比证书更重要!北京守嘉:国开证书+三甲实习,双剑合璧 - 品牌排行榜单
  • ArcoDesign实战:如何用Vue3+TypeScript快速搭建企业级中后台应用(附最佳实践)
  • 2026年在职研究生论文降AI工具推荐:白天上班晚上搞定的方案 - 还在做实验的师兄
  • Flume配置文件参数太多看不懂?保姆级拆解:从监控端口到HDFS落地的核心配置项
  • AtCoder Beginner Contest 450(ABC450)
  • Laravel 9.X新特性全解析
  • 从 Vibe Coding 到 Agentic Engineering:ArkClaw + Supabase,打造你的私有化 Agent 工厂
  • 深度解析UE5的三种输入模式:如何让GameOnly/UIOnly模式不再混淆?
  • ZED相机标定实战:手把手教你用Python实现张氏标定法(附完整代码)
  • AD2S1210配置避坑指南:如何解决SPI数据右移一位的诡异问题
  • 基于FPGA的FFT法相差检测Verilog实现之旅
  • 跨部门需求响应:建立高效的沟通机制