CF2134F.Permutation Oddness
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定四个正整数 c0、c1、c2 和 c3。
令 n=c0+c1+c2+c3。现在有一个长度为 n 的数组 a,其中 x(0≤x≤3)在 a 中出现了 cx 次。对于数组 a 的任意一个不同排列∗ b,定义其奇异度为† ‡:
i=1∑n−1lowbit(bi⊕bi+1)
你的任务是,对于每一个 k 从 0 到 2⋅(n−1)(包含),计算出奇异度等于 k 的 a 的不同排列的个数。
由于答案可能非常大,只需输出对 109+7 取模后的结果。
∗数组的一个排列是将其所有元素按照任意顺序重新排列。例如,[1,2,2] 是 [2,2,1] 的一个排列,但 [1,1,2] 不是。如果两个排列中存在至少一个位置不同,则认为它们是不同的。
† ⊕ 表示按位异或运算。
‡ lowbit(x) 为 x 的二进制下最低位(即最低的非零位对应的 2k),例如 lowbit(12)=4,lowbit(8)=8。特别地,规定 lowbit(0)=0。
输入格式
每组测试数据包含多组测试用例。第一行包含一个整数 t(1≤t≤50),表示测试用例的数量。每组测试用例一行,包含四个正整数 c0、c1、c2 和 c3(1≤c0,c1,c2,c3<800,4≤c0+c1+c2+c3≤800)。
令 n=c0+c1+c2+c3。保证所有测试用例的 n 之和不超过 800。
输出格式
对于每个测试用例,输出一行 2⋅(n−1)+1 个整数,分别表示奇异度为 0,1,…,2⋅(n−1) 的不同排列数,答案对 109+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
说明/提示
在第一个测试用例中,数组 a 有 24 个不同排列。下表为部分排列的奇异度值:
| 排列 | 奇异度 |
|---|---|
| [0,1,2,3] | lowbit(0⊕1)+lowbit(1⊕2)+lowbit(2⊕3)=1+1+1=3 |
| [0,2,1,3] | lowbit(0⊕2)+lowbit(2⊕1)+lowbit(1⊕3)=2+1+2=5 |
| [0,1,3,2] | lowbit(0⊕1)+lowbit(1⊕3)+lowbit(3⊕2)=1+2+1=4 |
统计这 24 个排列:
- 有 8 个排列奇异度为 3。
- 有 8 个排列奇异度为 4。
- 有 8 个排列奇异度为 5。
在第二个测试用例中,数组 a 的不同排列数为 840,奇异度分布如下:
- 8 个排列奇异度为 3。
- 32 个排列奇异度为 4。
- 126 个排列奇异度为 5。
- 184 个排列奇异度为 6。
- 244 个排列奇异度为 7。
- 156 个排列奇异度为 8。
- 72 个排列奇异度为 9。
- 18 个排列奇异度为 10。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?