首页 > 其他分享 >AT_abc283_g [ABC283G] Partial Xor Enumeration 题解

AT_abc283_g [ABC283G] Partial Xor Enumeration 题解

时间:2024-10-10 16:01:43浏览次数:1  
标签:Xor 题解 ll ABC283G long 异或 ans 线性 define

题目传送门

前置知识

线性基

解法

考虑线性基。

因为有可空子序列也参与运算,所以第 \(1\) 小的数是 \(0\);但线性基中是不允许有异或和为 \(0\) 的存在,故线性空间内第 \(k-1\) 小的数就是所求的第 \(k\) 小的数。

令每一个二进制位仅在它这一位的基底上出现,其他位上的基底直接异或掉。

将 \(k\) 二进制分组后取每一位的基底异或起来即可。

观察到 \(r-l \le 2 \times 10^{5}\),暴力处理每一组询问即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
ll d[70];
vector<ll>dd;
void insert(ll x)
{
    for(ll i=60;i>=0;i--)
    {
        if((x>>i)&1)
        {
            if(d[i]==0)
            {
                d[i]=x;
                break;
            }
            x^=d[i];
        }
    }
}
ll ask(ll x)
{
    x--;
    ll ans=0;
    for(ll i=0;i<dd.size();i++)
    {
        if((x>>i)&1)
        {
            ans^=dd[i];
        }
    }
    return ans;
}
int main()
{
    ll n,l,r,x,i,j;
    cin>>n>>l>>r;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        insert(x);
    }
    for(i=0;i<=60;i++)
    {
        if(d[i]!=0)
        {
            for(j=0;j<=i-1;j++)
            {
                if((d[i]>>j)&1)
                {
                    d[i]^=d[j];
                }
            }
            dd.push_back(d[i]);
        }
    }
    for(i=l;i<=r;i++)
    {
        cout<<ask(i)<<" ";
    }
    return 0;
}

后记

多倍经验: HDU3949 XOR

标签:Xor,题解,ll,ABC283G,long,异或,ans,线性,define
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18456549

相关文章

  • Codeforces Round 972 (Div. 2)题解记录
    A.SimplePalindromeaeiou,如果这里后面+u则会多出2,+o则会多3,通过分析加相同的字母比加之前存在的不同字母赚发现同一个太多了,又会增太大,遂平均分配,使增多幅度上升的缓慢#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;llgcd(llx,lly){ if(y==0) r......
  • 【题解】2023传智杯全国大学生程序设计竞赛-初赛第一场
    A.字符串拼接直接拼接两个字符串即可,注意的是字符串可能包含空格,因此需要使用getline函数进行输入。#include<bits/stdc++.h>usingnamespacestd;intmain(){strings1,s2;getline(cin,s1);getline(cin,s2);cout<<s1+s2<<endl;return0......
  • SNOI 2020 排列 题解
    https://www.luogu.com.cn/problem/P6795我一直很注重思考过程。这是做题的根本。初看T3,一个比较显然的贪心思路是,向外扩张合并连续段。由此清晰地发现,从1到N,被左边的数切分成若干“剩余”连续段,连续段内部,在右边的排列一定是连续的,右边的答案实际上已经确定。并且这些连......
  • 题解:CF1007D Ants
    题目传送门每只蚂蚁只走一对点肯定是不劣的,由此想到2-sat。限制条件是:若\((a,b)\)和\((c,d)\)两条链相交,则不能同时选。直接建图肯定是爆炸的。用树剖可以将\((a,b)\)这条链划分成\(O(\logn)\)个区间。因为同一条链的区间不交,限制条件变为若两个区间相交,则这两个点不......
  • BUUCTF_MISC题解析(6,8)
    6.乌镇峰会种图把打开的图片放进010editor,拉到最末尾就可以发现flag 8.N种方法解决打开文件是KEY.exe点击打不开,运行不了(exe文件是二进制文件),所以把他拉到010editor打开,data:image/jpg;base64,iVBORw0KGgo......gg==发现是base编码的形式,开头的提示说明是jpg格式的图片,......
  • P6309 题解
    很经典但是很好的题目。/qiang标签:线段树。数轴上有一些关键点,不同的关键点可能在同一坐标。关键点的坐标均为整数。支持两种操作:删去/添加一些关键点。取一个点。使得它与\([l,r]\)范围内所有关键点的距离最小。求最小距离。\(\text{关键点的坐标数}\le3\times......
  • 深度学习No module named ‘torchvision.transforms.functional_tensor‘问题解决
    问题在进行深度学习训练过程中出现ModuleNotFoundError:Nomodulenamed'torchvision.transforms.functional_tensor'报错,多方查阅资料后得到了解决方案。关于我的环境:CUDA==12.1torch==2.4.1GPU==4090D原先进行深度学习用的CUDA11.3,torch1.2.1,但是在训练时出现nvrtc......
  • AGC005 题解
    目录A-STringB-MinimumSumC-TreeRestoringA-STring用栈模拟一下即可,具体的,当栈顶出现形如ST时,将其弹出。#include<bits/stdc++.h>#definelllonglongusingnamespacestd;llRead(){ intsig=1; llnum=0; charc=getchar(); while(!isdigit(c))......
  • 2024年江西省职业院校技能大赛高职组“数据库运行与管理“竞赛样题解析答案
    2024年江西省职业院校技能大赛高职组"数据库运行与管理"竞赛样题解析答案文章目录2024年江西省职业院校技能大赛高职组"数据库运行与管理"竞赛样题解析答案模块A:数据库理论模块B:数据库设计与运维`任务一参考答案:``任务二参考答案:`模块C:数据库查询与分析`模块C参考答案:`......
  • [NOIP2006 提高组] 作业调度方案 题解
    题目描述我们现在要利用 m 台机器加工 n 个工件,每个工件都有 m 道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。每个工件的每个工序称为一个操作,我们用记号 j-k 表示一个操作,其中 j 为 1 到 n 中的某个数字,为工件号;k 为 ......