2020牛客暑期多校训练营(第六场)B-Binary Vector

Binary Vector

https://ac.nowcoder.com/acm/contest/5671/B

题目大意

设A={0,1},每天Roundgod从(即维度为n,每一位由01组成的所有向量的集合)中随机选择一个二进制向量。现在他想知道n天中选取n个线性独立向量的概率。
表示n的答案,最后输出图片说明图片说明 表示异或。

线性独立是什么?(其实就是任意一个向量不能通过其他两个的“加减”运算得到)
https://baike.baidu.com/item/%E7%BA%BF%E6%80%A7%E7%8B%AC%E7%AB%8B

解题思路

由于这n个向量线性独立,所以张成了(N维)满秩空间,每一个向量都不属于之前的空间,总共有个向量。

我们先设有这些向量。
当n=1时,有与这2个向量与线性相关;
当n=2时,有这4个向量与线性相关;
当n=3时,有这8个向量与线性相关;

所以,对于每个i,会有个向量线性相关,所以有个向量线性独立(无关)。
那么就很好做了,先得出一个easy的结论:。接着推导:


(最后一步是将n-i换为i)

AC代码

#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
long long a[20000010],x=5e8+4,y=5e8+4;
int main()
{
    int n,t,i;
    a[1]=5e8+4;
    for(i=2;i<=2e7;i++)
    {
        x=x*y%mod;
        a[i]=(a[i-1]-a[i-1]*x)%mod+mod;
    }
    for(i=2;i<=2e7;i++) a[i]^=a[i-1];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%lld\n",a[n]);
    }
    return 0;
}
2020牛客暑期多校训练营 文章被收录于专栏

只是题解,可参考,可学习,可点赞:)

全部评论
博主您好,对于 a+b这类的向量 是否一定是出现在 01 向量里面呢,比如第一次选择 a(1,0,0)第二次选择b(1,1,0),第三次不可能选的到a+b(2,1,0) 吧,不知道我哪里理解错了。QAQ~
1 回复 分享
发布于 2020-08-17 13:47
博主好像写错了哦,f(n)最后两个式子明显是不相等的。出题人的题解是:那么最后N个向量秩为N当且仅当每次加入的向量都不属于之前的空间,所以应该从0到n-1这样化到下边才是1到n。
1 回复 分享
发布于 2020-07-28 11:50

相关推荐

牛客ID:561366855:期望薪资多少?难以相信这简历找不到工作。说明二本电子信息专业想对口就业非常难。
点赞 评论 收藏
分享
评论
13
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务