CF2134F.Permutation Oddness

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

给定四个正整数 c0c_0、c1c_1、c2c_2 和 c3c_3。

令 n=c0+c1+c2+c3n = c_0 + c_1 + c_2 + c_3。现在有一个长度为 nn 的数组 aa,其中 xx(0≤x≤30\le x\le 3)在 aa 中出现了 cxc_x 次。对于数组 aa 的任意一个不同排列∗^{\text{∗}} bb,定义其奇异度为†^{\text{†}} ‡^{\text{‡}}:

∑i=1n−1lowbit(bi⊕bi+1)\sum_{i = 1}^{n-1} \text{lowbit}(b_i \oplus b_{i+1})

你的任务是,对于每一个 kk 从 00 到 2⋅(n−1)2 \cdot (n-1)(包含),计算出奇异度等于 kk 的 aa 的不同排列的个数。

由于答案可能非常大,只需输出对 109+710^9+7 取模后的结果。

∗^{\text{∗}}数组的一个排列是将其所有元素按照任意顺序重新排列。例如,[1,2,2][1,2,2] 是 [2,2,1][2,2,1] 的一个排列,但 [1,1,2][1,1,2] 不是。如果两个排列中存在至少一个位置不同,则认为它们是不同的。

†^{\text{†}} ⊕\oplus 表示按位异或运算。

‡^{\text{‡}} lowbit(x)\text{lowbit}(x) 为 xx 的二进制下最低位(即最低的非零位对应的 2k2^k),例如 lowbit(12)=4\text{lowbit}(12)=4,lowbit(8)=8\text{lowbit}(8)=8。特别地,规定 lowbit(0)=0\text{lowbit}(0)=0。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt(1≤t≤501 \le t \le 50),表示测试用例的数量。每组测试用例一行,包含四个正整数 c0c_0、c1c_1、c2c_2 和 c3c_3(1≤c0,c1,c2,c3<8001 \le c_0, c_1, c_2, c_3 < 800,4≤c0+c1+c2+c3≤8004 \le c_0 + c_1 + c_2 + c_3 \le 800)。

令 n=c0+c1+c2+c3n = c_0 + c_1 + c_2 + c_3。保证所有测试用例的 nn 之和不超过 800800。

输出格式

对于每个测试用例,输出一行 2⋅(n−1)+12 \cdot (n-1) + 1 个整数,分别表示奇异度为 0,1,…,2⋅(n−1)0,1,\ldots, 2 \cdot (n-1) 的不同排列数,答案对 109+710^9+7 取模。

输入输出样例

  • 输入#1

    3
    1 1 1 1
    1 2 4 1
    3 3 3 3

    输出#1

    0 0 0 8 8 8 0
    0 0 0 8 32 126 184 244 156 72 18 0 0 0 0
    0 0 0 8 56 424 1472 5760 12128 29376 40384 65232 59920 65232 40384 29376 12128 5760 1472 424 56 8 0

说明/提示

在第一个测试用例中,数组 aa 有 2424 个不同排列。下表为部分排列的奇异度值:

排列 奇异度
[0,1,2,3][0,1,2,3] lowbit(0⊕1)+lowbit(1⊕2)+lowbit(2⊕3)=1+1+1=3\text{lowbit}(0 \oplus 1) + \text{lowbit}(1 \oplus 2) + \text{lowbit}(2 \oplus 3) = 1 + 1 + 1 = 3
[0,2,1,3][0,2,1,3] lowbit(0⊕2)+lowbit(2⊕1)+lowbit(1⊕3)=2+1+2=5\text{lowbit}(0 \oplus 2) + \text{lowbit}(2 \oplus 1) + \text{lowbit}(1 \oplus 3) = 2 + 1 + 2 = 5
[0,1,3,2][0,1,3,2] lowbit(0⊕1)+lowbit(1⊕3)+lowbit(3⊕2)=1+2+1=4\text{lowbit}(0 \oplus 1) + \text{lowbit}(1 \oplus 3) + \text{lowbit}(3 \oplus 2) = 1 + 2 + 1 = 4

统计这 2424 个排列:

  • 有 88 个排列奇异度为 33。
  • 有 88 个排列奇异度为 44。
  • 有 88 个排列奇异度为 55。

在第二个测试用例中,数组 aa 的不同排列数为 840840,奇异度分布如下:

  • 88 个排列奇异度为 33。
  • 3232 个排列奇异度为 44。
  • 126126 个排列奇异度为 55。
  • 184184 个排列奇异度为 66。
  • 244244 个排列奇异度为 77。
  • 156156 个排列奇异度为 88。
  • 7272 个排列奇异度为 99。
  • 1818 个排列奇异度为 1010。

由 ChatGPT 5 翻译

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

首页