zoukankan      html  css  js  c++  java
  • [bzoj 2844]线性基+高斯消元

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2844

    又用到线性基+高斯消元的套路题了,因为经过高斯消元以后的线性基有非常好的序关系,所以这种套路还是经常考到的。

    求出一个经过高斯消元的基以后,根据基里面的元素个数可以确定值域的数的个数,并且给定一个k也可以求出第k小的元素。那么如果把序列的元素个数比线性基的秩多出来的那些元素,其实就是把值域翻倍了。每多一个元素,值域翻两倍。B序列从0开始编号可能会容易写一点。

    #include<bits/stdc++.h>
    using namespace std;
    
    vector<int> base;
    void insert(int x)
    {
        for (int i=0;i<base.size();i++) x=min(x,x^base[i]);
        if (x) base.push_back(x);
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            insert(x);
        }
        sort(base.begin(),base.end());
        for (int i=base.size()-1;i>=0;i--)
        {
            for (int j=i+1;j<base.size();j++)
            {
                base[j]=min(base[j],base[j]^base[i]);
            }
        }
        int more=n-base.size();
        int id=0;
        int q;
        scanf("%d",&q);
        for (int i=base.size()-1;i>=0;i--)
        {
            if ((q^base[i])<q)
            {
                q=q^base[i];
                id^=1<<i;
            }
        }
        for (int i=0;i<more;i++) id=(id*2)%10086;
        id=(id+1)%10086;
        printf("%d",id);
        return 0;
    }
  • 相关阅读:
    选择和冒泡
    马尔科夫模型
    网络IO
    java项目相对路径
    MySQL 数据类型
    基于 Token 的身份验证方法
    git 打标签
    git版本回退
    robotframework使用过程中的一些总结
    robotframework安装robotframework-requests库遇到的几种问题
  • 原文地址:https://www.cnblogs.com/acmsong/p/7510242.html
Copyright © 2011-2022 走看看