首页 > 其他分享 >hdu:XOR(线性基)

hdu:XOR(线性基)

时间:2023-05-12 11:49:09浏览次数:46  
标签:hdu XOR int ll memset flag 线性

XOR

数学-线性基

设原集为S,线性基为P,若|S|>|P|,则异或会出现0。若|P|==n,则会产生2^n个不同数(包括0)
而线性基不包含0元素,故若|S|中元素可以异或出0,k需要自减

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+10;
ll a[N],d[64],t[64];//注意:2的六十次方大于1e18
void solve()
{
    memset(d,0,sizeof d);
    memset(t,0,sizeof t);
    int n;
    bool flag=0;//flag表示是否存在数为0
    cin>>n;
    for(int i=0;i<n;++i) 
    {
        cin>>a[i];
        ll x=a[i];
        for(int j=61;j>=0;--j)
        {
            if((x>>j)&1)
            {
                if(!d[j]) {d[j]=x;break;}//注意:如果此处d[j]等于x需要break掉,不能继续循环
                else x^=d[j];
            }
        } 
    }
    
    for(int i=0;i<=61;++i)
    {
        for(int j=i+1;j<=61;++j)
        {
            if(d[j]>>i&1) d[j]^=d[i];
        }
    }
   
    int cnt=0;
    for(int i=0;i<=61;++i) if(d[i]) t[cnt++]=d[i];
    if(cnt<n) flag=1;
   
    int q;
    ll k;
    cin>>q;
    for(int i=0;i<q;++i) 
    {
        cin>>k;
        ll ans=0;
        if(flag) k--;
        if(k>=(1ll<<cnt)) 
        {
            cout<<"-1"<<'\n';continue;
        }
        for(int j=0;j<=61;++j)
        {
            if(k>>j&1) ans^=t[j];
        }
        cout<<ans<<'\n';
    }
    
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin>>T;
    for(int i=1;i<=T;++i)
    {
        cout<<"Case #"<<i<<':'<<'\n';
        solve();
    }
}

标签:hdu,XOR,int,ll,memset,flag,线性
From: https://www.cnblogs.com/ruoye123456/p/17393601.html

相关文章

  • 多元线性回归分析实例
    多元线性回归分析1Introduction相关性回归分析用来研究相关性相关性不等于因果性。通过回归分析探究数据之间的相关性因变量Y要研究的核心变量自变量X尝试用X去分析Y的形成机制,进而达到预测Y的目的回归分析的目的有的变量不相关,需要排除有的变量正相关,有的变量负......
  • 线性表
    顺序表的存、读数据时的时间复杂度为o(1);插入删除时的时间复杂度为o(n);比较适合元素个数不太变化的应用链表的定义structListNode{intval;//结点储存的值ListNode*next;//指向下一个结点的指针ListNode(intx):val(x),next(NULL){}//结点的构造函数};......
  • 学校数据结构实验_线性表:纯C语言版
    首先分别声明链表和顺序表的结构单位,  1:插入实现:顺序表插入比较简单,直接访问下表找到插入位置,然后移动所有后面的数据将插入的位置空出来,然后将需要插入的数据插入,链表的插入:因为一般链表都是调用头插或者尾插,但是为了和顺序表相比较,再插入的时候增加了随机位置......
  • Average Curve:基于MATLAB/Simulink的通过线性插值返回多条曲线的平均曲线。
    AverageCurve:基于MATLAB/Simulink的通过线性插值返回多条曲线的平均曲线。返回的平均曲线也具有唯一的和排序的横坐标。ID:4630651773021127......
  • R语言用线性混合效应(多水平/层次/嵌套)模型分析声调高低与礼貌态度的关系|附代码数据
    全文下载链接:http://tecdat.cn/?p=23681最近我们被客户要求撰写关于线性混合效应的研究报告,包括一些图形和统计输出。线性混合效应模型与我们已经知道的线性模型有什么不同?线性混合模型(有时被称为"多层次模型"或"层次模型",取决于上下文)是一种回归模型,它同时考虑了(1)被感兴趣......
  • 9. 线性表概念
    线性表1.1概念简介线性表(简称表),是一种抽象的数学概念,是一组元素的序列的抽象,它由有穷个元素组成(0个或任意个)顺序表:使用一大块连续的内存顺序存储表中的元素,这样实现的表称为顺序表,或称连续表在顺序表中,元素的关系使用顺序表的存储顺序自然地表示链接表:在存储空间......
  • golang中xorm自动维护表结构自动导入数据的实现
    Xorm简介Go标准库提供的数据库接口database/sql比较底层,使用它来操作数据库非常繁琐,而且容易出错。因而社区开源了不少第三方库,有各式各样的ORM(ObjectRelationalMapping,对象关系映射库),如gorm和xorm。其中xorm是一个简单但强大的ORM库,使用它可以大大简化我们的数据库操作,笔......
  • 【视频】什么是非线性模型与R语言多项式回归、局部平滑样条、 广义相加GAM分析工资数
    全文链接:http://tecdat.cn/?p=9706最近我们被客户要求撰写关于非线性模型的研究报告,包括一些图形和统计输出。在这文中,我将介绍非线性回归的基础知识。非线性回归是一种对因变量和一组自变量之间的非线性关系进行建模的方法。最后我们用R语言非线性模型预测个人工资数据是否每年......
  • (hdu step 3.1.7)Children’s Queue(求n个人站在一起有m个人必须是连在一起的方案数)
    题目:Children’sQueueTimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):853AcceptedSubmission(s):479 ProblemDescriptionTherearemanystudentsinPHTSchool.Oneday,theheadmasterwhosen......
  • (hdu step 3.2.1)Max Sum(简单dp:求最大子序列和、起点、终点)
    题目:MaxSumTimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):1390AcceptedSubmission(s):542 ProblemDescriptionGivenasequencea[1],a[2],a[3]......a[n],yourjobistocalculatethemaxsu......