zoukankan      html  css  js  c++  java
  • luoguP4869 albus就是要第一个出场 线性基

    省队选拔前复习一下线性基.  

    证明不会,永远都不会,学习证明是不可能的

    有如下结论:

    1. 线性基大小是固定的,不会因为加入顺序不同而改变.  

    2. 设线性基大小为 k,则一共有 $2^k$ 种不同的异或结果.  

    3. 每种异或结果出现次数恰好为 $2^{n-k}$.  

    4. 线性基内的数随便异或线性基也不变.  

    #include <bits/stdc++.h>        
    #define mod 10086 
    #define ll long long   
    #define setIO(s) freopen(s".in","r",stdin) 
    using namespace std;  
    int n,tot;   
    int s[50];        
    ll p[60],a[200000];  
    void insert(ll v) 
    {
        for(int i=52;i>=0;--i) 
        {
            if((1ll<<i)&v)
            {   
                if(p[i]) v^=p[i];  
                else { p[i]=v; return; }   
            }
        }
    }
    ll qpow(ll x,ll y) 
    {
        ll tmp=1;
        for(;y;y>>=1,x=x*x%mod) if(y&1) tmp=tmp*x%mod;  
        return tmp;  
    }       
    int main() 
    {
        // setIO("input");        
        scanf("%d",&n);   
        for(int i=1;i<=n;++i) scanf("%lld",&a[i]),insert(a[i]);  
        ll x;  
        scanf("%lld",&x);    
        for(int i=0;i<=52;++i) if(p[i]) s[tot++]=i;                
        // 多少个比 i 小:           
        ll rank=0;    
        for(int i=tot-1;i>=0;--i) if((1ll<<s[i])&x) rank+=1ll<<i;        
        printf("%lld
    ",(rank*qpow(2,n-tot)%mod+1)%mod);    
        return 0; 
    }
    

      

  • 相关阅读:
    Oracle数据库备份与恢复的三种方法
    mybatis内置类型
    mybatis中#{}和${}的区别
    Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?
    java web简单权限管理设计
    Flask总结篇
    Django总结篇
    API总结
    实战小练习
    数据操作
  • 原文地址:https://www.cnblogs.com/guangheli/p/13150888.html
Copyright © 2011-2022 走看看