Discuz! Board

 找回密码
 立即注册
查看: 610|回复: 2

每日一题6.7(线性基)

[复制链接]

9

主题

15

回帖

160

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
160

黄金骑士钻石大师

发表于 2025-6-6 01:01:36 | 显示全部楼层 |阅读模式

6

主题

20

回帖

122

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122

黄金骑士

发表于 2025-7-4 08:59:32 | 显示全部楼层
[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){

    int n;
    cin>>n;

    vector<int>a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    int k=0;
    auto guass=[&](){
        for(int i=62;i>=0;i--){
            for(int j=k;j<n;j++){
                if(a[j]>>i&1){
                    swap(a[j],a[k]);
                }
            }

            if(!(a[k]>>i&1)) continue;

            for(int j=0;j<n;j++){
                if(j!=k&&(a[j]>>i&1)) a[j]^=a[k];
            }
            k++;
            if(k==n) break;

        }
    };  

    guass();

    int ans=0;
    for(int i=0;i<k;i++) ans^=a[i];

    cout<<ans<<'\n';
    return 0;
}
回复

使用道具 举报

6

主题

20

回帖

122

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122

黄金骑士

发表于 2025-7-4 09:32:45 | 显示全部楼层
[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){

    int n;
    cin>>n;

    vector<int>a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    int k=0;

    vector<int>p(64);

    auto insert=[&](int x){
       for(int i=62;i>=0;i--){
        if(x>>i&1){
            if(p[i]) x^=p[i];
            else{
                p[i]=x;
                break;
            }
        }
        
       }
    };  

    for(int i=0;i<n;i++){
        insert(a[i]);
    }

    int ans=0;
    for(int i=60;i>=0;i--){
        if((ans^p[i])>ans) ans=ans^p[i];
    }

    cout<<ans<<'\n';
    return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX ( 鄂ICP备2024088332号-1 )

GMT+8, 2025-7-23 17:35 , Processed in 0.059030 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表