AT_KeioPC2025_m.Popcount MST

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

对于长度为 NN 的整数序列 A=(A0,…,AN−1)A = (A_0, \dots, A_{N-1}),我们定义 f(A)f(A) 如下。这里 a AND ba\ \mathrm{AND}\ b 表示 aa 与 bb 的按位与操作。

  • 我们考虑一个有 2N2^N 个顶点的加权完全图 GG,顶点编号为 00 到 2N−12^N-1。对于顶点 ii 和顶点 jj 之间的边,其权值为 Apopcount(i AND j)A_{\mathrm{popcount}(i\ \mathrm{AND}\ j)}。此时,该图 GG 的最小生成树所包含的所有边的权值之和记为 f(A)f(A)。

给定长度为 NN 的整数序列 B=(B0,…,BN−1)B = (B_0, \dots, B_{N-1}),其中 BB 的每个元素为 −1-1 或者 11 到 MM 之间的整数。

将 BB 中所有 −1-1 替换成 11 到 MM 之间的整数,可以得到一个数列 B′B'。若 BB 中 −1-1 的个数为 qq,则这样的 B′B' 一共有 MqM^q 种可能。

请你计算所有可能的 B′B' 的 f(B′)f(B') 之和,对 998244353998244353 取模后输出。

popcount\mathrm{popcount} 是什么?对于非负整数 xx,popcount⁡(x)\operatorname{popcount}(x) 表示将 xx 用二进制表示时 11 的个数。更严格地说,对于非负整数 xx,若 x=∑i=0∞bi2i (bi∈{0,1})x = \sum_{i=0}^{\infty} b_i 2^i \ (b_i \in \lbrace 0,1\rbrace),那么 popcount⁡(x)=∑i=0∞bi\operatorname{popcount}(x) = \sum_{i=0}^{\infty} b_i。

例如,将 1313 用二进制表示为 1101,因此 popcount⁡(13)=3\operatorname{popcount}(13) = 3。

输入格式

输入通过标准输入提供,格式如下:

N MN \ M
B0 … BN−1B_0\ \dots\ B_{N-1}

输出格式

请输出答案。

输入输出样例

  • 输入#1

    2 2
    -1 2

    输出#1

    9
  • 输入#2

    7 7
    -1 7 -1 7 -1 7 -1

    输出#2

    801052
  • 输入#3

    8 8
    5 7 2 4 7 1 8 6

    输出#3

    445

说明/提示

部分分

本题包含部分分。

  • 如果你的算法可以正确解决满足 1≤Bi≤M1 \le B_i \le M 的数据,将获得 11 分。

样例解释 1

所有可行的 B′B' 有如下 22 种:

  • 当 B′=(1,2)B' = (1, 2) 时,一个可能的最小生成树由边 (0,1),(0,2),(0,3)(0, 1), (0, 2), (0, 3) 构成,权值和为 33。
  • 当 B′=(2,2)B' = (2, 2) 时,一个可能的最小生成树由边 (0,1),(1,2),(2,3)(0, 1), (1, 2), (2, 3) 构成,权值和为 66。

因此,所有 B′B' 的 f(B′)f(B') 之和为 99。

数据范围

  • 1≤N,M≤1250001 \le N, M \le 125000
  • BiB_i 为 −1-1 或 11 到 MM 之间的整数。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页