1 条题解

  • 0
    @ 2023-11-1 8:44:02

    T2:

    30%:枚举每个数所在的集合或者不选,然后判定即可。复杂度O(n*3^n)。

    60%: Dp,两个数相等就相当于两个数的xor为0。设 f[i][j][k=0..2]代表 处理到第 I 个数, 如果 k = 1代表and值为j,如果k = 2代表xor 值为 j,如果k = 0则代表一个元素都没 取。所以很容易得到方程:

    f[i][j][0] = f[i + 1][j][0]

    f[i][j & ai][1] = f[i + 1][j][1] + f[i + 1][j][0] + f[i + 1][j & ai][1]

    f[i][j ^ ai][2] = f[i + 1][j][1] + f[i + 1][j][2] + f[i + 1][j ^ ai][2];

    最后f[1][0][2]就是答案, 复杂度为O(n * 1024 * 3)

    DP还可以分开用f[i][j]和g[i][j]表示前i个xor值为j,后i个and值为j的方案数, 随后枚举分界点k来求总方案数。复杂度O(n * 1024 * 3)。

    100%:满分数据需要高精,答案位数较大,需要进行压位来防止TLE,因为不知道答案的 位数究竟多大,压位后高精数组仍需要开的较大一些,所以原DP的数组滚动即可。

    • 1

    信息

    ID
    1997
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者