zoukankan      html  css  js  c++  java
  • 【贪心】【线性基】bzoj2844 albus就是要第一个出场

    引用题解:http://blog.csdn.net/PoPoQQQ/article/details/39829237

    注意评论区。

    #include<cstdio>
    using namespace std;
    #define MOD 10086
    #define N 100001
    int n,a[N],m,base[32],k,real[32],ans,now;
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    	scanf("%d",&m);
    	int j;  
    	for(int i=1;i<=n;++i)
    	  {
        	for(j=31;j>=0;--j)//尝试用所有的线性基去消a[i]
              if(((a[i]>>j)&1)&&base[j])
                a[i]^=base[j];
        	if(a[i])//若a[i]不能被以前的线性基所表示(线性无关)
        	  {
            	for(j=31;j>=0;--j)//把a[i]的剩余部分插入线性基
                  if(((a[i]>>j)&1)&&(!base[j]))
            		{
                      base[j]=a[i];
                      break;
                	}
            	for(int k=31;k>j;--k)//从线性基里把新插入的家伙消掉
                  if((base[k]>>j)&1)
                    base[k]^=a[i];
        	  }
    	  }
    	for(int i=0;i<=31;++i) if(base[i]) real[k++]=base[i];
    	for(int i=k-1;i>=0;--i)
    	  if((real[i]^now)<=m)
    	    {
    	      now^=real[i];
    	  	  ans=(ans+(1<<i)%MOD)%MOD;
    	    }
    	for(int i=0;i<n-k;++i)
    	  ans=(ans<<1)%MOD;
    	printf("%d
    ",(ans+1)%MOD);
    	return 0;
    }
  • 相关阅读:
    word-wrap和word-break的区别
    transform 二维转变
    过渡
    新闻下滑导航案例
    background-origin,clip
    边框图片
    背景样式
    线性渐变与径向渐变与重复渐变
    边框阴影
    盒模型和圆角
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4366962.html
Copyright © 2011-2022 走看看