2020暑假牛客多校联赛第六场(B.Binary Vector)

B.Binary Vector

在这里插入图片描述
题目大意:
N个向量线性无关。(每个向量都不属于之前的空间)N维
一共有2^n个向量。
求线性无关的概率。
首先我们先了解一下线性相关的概念。
在这里插入图片描述
在这里插入图片描述
思路:
我们假设向量为a,b,c,d,e…
下面看当n为不同数时相对应的线性相关情况:
当n=1时:对于a:a,0 (2)
当n=2时:对于a,b:a,b,a+b,0 (4)
当n=3时:对于a,b,c:a,b,c,a+b,a+c,b+c,a+b+c,0 (8)
………
发现不难当n=i时,2i个向量线性相关。
同理:那么就有个2n-2i个向量线性无关。
在这里插入图片描述
在这里插入图片描述
代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 2e7 + 5;
const int _mod = 1e9 + 7;
long long f[N];long long p2[N];long long bin[N];
int t, n;
int main()
{
    scanf("%d", &t);
    f[1] = 500000004; p2[0] = 1;bin[0] = 1;
    for (int i = 1; i < N; i++)
    {
        p2[i] = p2[i - 1] * 500000004;
        p2[i] %= _mod;
        bin[i] = bin[i - 1] << 1;
        bin[i] %= _mod;
        if (i >= 2)
        {
            f[i] = f[i - 1] * (bin[i] - 1);
            f[i] %= _mod;
            f[i] *= p2[i];
            f[i] %= _mod;
        }
    }
    for (int i = 1; i < N; i++)
    {
        f[i] ^= f[i - 1];
    }
    while (t--)
    {
        scanf("%d", &n);
        printf("%lld\n", f[n]);
    }
}
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页