CF1326F2.Wise Men (Hard Version)

NOI/NOI+/CTSC

通过率:0%

时间限制:4.00s

内存限制:512MB

AC君温馨提醒

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

题目描述

This is the hard version of the problem. The difference is constraints on the number of wise men and the time limit. You can make hacks only if all versions of this task are solved.

nn wise men live in a beautiful city. Some of them know each other.

For each of the n!n! possible permutations p1,p2,…,pnp_1, p_2, \ldots, p_n of the wise men, let's generate a binary string of length n−1n-1: for each 1≤i<n1 \leq i \lt n set si=1s_i=1 if pip_i and pi+1p_{i+1} know each other, and si=0s_i=0 otherwise.

For all possible 2n−12^{n-1} binary strings, find the number of permutations that produce this binary string.

这是该问题的困难版本。区别在于对智者人数和时间限制的约束。仅当该题的所有版本均被解决后,你才可以进行 hack。

一座美丽的城市中住着 nn 位智者。其中一些人彼此相识。

对于 n!n! 种可能的智者排列 p1,p2,…,pnp_1, p_2, \ldots, p_n 中的每一种,我们生成一个长度为 n−1n-1 的二进制字符串:对每个 1≤i<n1 \leq i \lt n,若 pip_i 与 pi+1p_{i+1} 彼此相识,则令 si=1s_i = 1;否则令 si=0s_i = 0。

对所有 2n−12^{n-1} 种可能的二进制字符串,求出能生成该字符串的排列数目。

输入格式

The first line of input contains one integer nn (2≤n≤18)2 \leq n \leq 18) — the number of wise men in the city.

The next nn lines contain a binary string of length nn each, such that the jj-th character of the ii-th string is equal to '1' if wise man ii knows wise man jj, and equals '0' otherwise.

It is guaranteed that if the ii-th man knows the jj-th man, then the jj-th man knows ii-th man and no man knows himself.

输入的第一行包含一个整数 nn(2≤n≤182 \leq n \leq 18),表示城市中智者的数量。

接下来的 nn 行,每行包含一个长度为 nn 的二进制字符串;其中第 ii 行的第 jj 个字符为 '1',表示第 ii 位智者认识第 jj 位智者;否则为 '0'。

保证:若第 ii 位智者认识第 jj 位智者,则第 jj 位智者也认识第 ii 位智者,且任何人都不认识自己。

输出格式

Print 2n−12^{n-1} space-separated integers. For each 0≤x<2n−10 \leq x \lt 2^{n-1}:

  • Let's consider a string ss of length n−1n-1, such that si=⌊x2i−1⌋ mod 2s_i = \lfloor \frac{x}{2^{i-1}} \rfloor \bmod 2 for all 1≤i≤n−11 \leq i \leq n - 1.
  • The (x+1)(x+1)-th number should be equal to the required answer for ss.

输出 2n−12^{n-1} 个空格分隔的整数。对每个 0≤x<2n−10 \leq x \lt 2^{n-1}:

  • 考虑一个长度为 n−1n-1 的字符串 ss,其中对所有 1≤i≤n−11 \leq i \leq n - 1,有 si=⌊x2i−1⌋ mod 2s_i = \lfloor \frac{x}{2^{i-1}} \rfloor \bmod 2。
  • 第 (x+1)(x+1) 个数应等于该字符串 ss 对应的所求答案。

输入输出样例

  • 输入#1

    3
    011
    101
    110

    输出#1

    0 0 0 6
  • 输入#2

    4
    0101
    1000
    0001
    1010

    输出#2

    2 2 6 2 2 6 2 2

说明/提示

In the first test, each wise man knows each other, so every permutation will produce the string 1111.

In the second test:

  • If p=1,2,3,4p = {1, 2, 3, 4}, the produced string is 101101, because wise men 11 and 22 know each other, 22 and 33 don't know each other, and 33 and 44 know each other;
  • If p=4,1,2,3p = {4, 1, 2, 3}, the produced string is 110110, because wise men 11 and 44 know each other, 11 and 22 know each other and 22, and 33 don't know each other;
  • If p=1,3,2,4p = {1, 3, 2, 4}, the produced string is 000000, because wise men 11 and 33 don't know each other, 33 and 22 don't know each other, and 22 and 44 don't know each other.

在第一个测试中,每位智者都彼此认识,因此每个排列都会生成字符串 1111。

在第二个测试中:

  • 若 p={1,2,3,4}p = \{1, 2, 3, 4\},生成的字符串为 101101,因为智者 11 和 22 彼此认识,智者 22 和 33 彼此不认识,智者 33 和 44 彼此认识;
  • 若 p={4,1,2,3}p = \{4, 1, 2, 3\},生成的字符串为 110110,因为智者 11 和 44 彼此认识,智者 11 和 22 彼此认识,而智者 22 和 33 彼此不认识;
  • 若 p={1,3,2,4}p = \{1, 3, 2, 4\},生成的字符串为 000000,因为智者 11 和 33 彼此不认识,智者 33 和 22 彼此不认识,智者 22 和 44 彼此不认识。

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

首页