码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj4269

时间:2017-05-10 14:55:12      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:div   amp   swa   geo   lap   long   code   a10   opened   

http://www.lydsy.com/JudgeOnline/problem.php?id=4269

裸线性基,一个数取多次就是没取。。。

又有了些新的理解:a数组的前now个元素是基底,也就是可以变成1的位,最大就是所有1都选,次大就是最后一个1不选

技术分享
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100010;
int n, now;
ll a[N], bin[40]; 
void gauss()
{
    now = 1;
    for(int i = 31; i >= 0; --i)
    {
        int x = now;
        while(x <= n && !(a[x] & bin[i])) ++x;
        if(x == n + 1) continue;
        swap(a[now], a[x]);
        for(int j = 1; j <= n; ++j) if(j != now && a[j] & bin[i])
            a[j] ^= a[now];
        ++now; //下一个数 ,下一个自由位 
    }
    --now;
}
int main()
{
    bin[0] = 1; for(int i = 1; i <= 31; ++i) bin[i] = bin[i - 1] * 2;
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    gauss();
    ll ans = 0;
    for(int i = 1; i <= now; ++i) ans ^= a[i];
    printf("%lld %lld\n", ans, ans ^ a[now]); //a[now]是最低的位 
    return 0;
}
View Code

 

bzoj4269

标签:div   amp   swa   geo   lap   long   code   a10   opened   

原文地址:http://www.cnblogs.com/19992147orz/p/6835442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!