首页 > 其他分享 >F. Mahmoud and Ehab and yet another xor task 线性基

F. Mahmoud and Ehab and yet another xor task 线性基

时间:2023-09-13 22:12:59浏览次数:33  
标签:task xor kkk int auto ll Mahmoud 线性 return

Problem - F - Codeforces

 题意:给出一个长度为n的数组,然后给出q次询问。

对于每次询问,给出一个l和一个x,请你求出在[1,l]这个区间内,有多少个子序列是好的,好的的定义是这个子序列的异或和为x。

做法:考虑线性基,先离线处理询问,对其l排序。然后对于l,求该情况下的线性基。然后,我们在检测一下x能否被我们的线性基给搞出来,如果不行,答案就是0。

否则,答案就是2的(当前的元素个数减去线性基里元素的个数)次方。这个也蛮好理解的,就是对于一个线性基外的数,他有两种选择,线性基外的数选完了之后,对于线性基,总可以选出一组基底来,使其异或和为x。

不过这题感觉还不太严谨哦,我本以为要特殊考虑0的情况,但好像这题数据水了。

 

struct kkk{
    int idx,l;
    ll x,ans;
};
bool cmp1(kkk a,kkk b){
    return a.l<b.l;
}
bool cmp2(kkk a,kkk b){
    return a.idx<b.idx;
}


vector<ll>B;
void insert(ll x){
    for(auto &b:B)x=min(x,b^x);
    for(auto &b:B)b=min(b,x^b);
    if(x)B.push_back(x);
}
bool check(ll x){
    for(auto &b:B)x=min(x,b^x);
    if(x)return false;return true;
}
void solve(){
    int n,q;cin>>n>>q;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    vector<kkk>b(q+1);
    for(int i=1;i<=q;i++){
        cin>>b[i].l>>b[i].x;
        b[i].idx=i;
    }
    sort(b.begin()+1,b.end(),cmp1);
    int lt=0;
    for(int i=1;i<=q;i++){
        while(lt<b[i].l){
            lt++;insert(a[lt]);
        }
        if(check(b[i].x))b[i].ans=binpow(2ll,(ll)(lt-(LL)B.size()),mod);
        else b[i].ans=0ll;
    }
    sort(b.begin()+1,b.end(),cmp2);
    for(int i=1;i<=q;i++){
        cout<<b[i].ans<<"\n";
    }

 

标签:task,xor,kkk,int,auto,ll,Mahmoud,线性,return
From: https://www.cnblogs.com/shi5/p/17700922.html

相关文章

  • 【Azure Batch】在批处理的Task中如何让它执行多个CMD指令呢
    问题描述根据AzureBatch的入门文档(使用Azure门户创建Batch帐户并运行作业: https://docs.azure.cn/zh-cn/batch/quick-create-portal),创建了BatchAccount,Pool,Job,Task.并且成功运行。这时候,想要在Batch的Task中执行多个CMD指令,尝试写多行执行。类似如下:cmd/c"echo......
  • 【Azure Batch】在批处理的Task中如何让它执行多个CMD指令呢
    问题描述根据AzureBatch的入门文档(使用Azure门户创建Batch帐户并运行作业: https://docs.azure.cn/zh-cn/batch/quick-create-portal),创建了BatchAccount,Pool,Job,Task.并且成功运行。这时候,想要在Batch的Task中执行多个CMD指令,尝试写多行执行。类似如下:cmd/c......
  • 基础总结篇之三:Activity的task相关
    古人學問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。南宋.陸遊《冬夜讀書示子聿(yù)》软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物。今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有......
  • 使用Windows Task Scheduler进行OneDrive强制同步
    前言OneDrive的同步策略非常反人类:它允许用户同步文件,但仅限于其划定范围的特定文件夹/文件类型。这意味着用户不能对任意文件夹进行同步,简直是难以想象!图1OneDrive对备份文件的选项仅限于几个文件夹内,体现了老牌科技企业在教育用户如何使用计算机上的良苦用心StrawmanSolut......
  • System.Threading.Tasks.Extensions介绍
    System.Threading.Tasks.Extensions是一个用于扩展.NET中任务(Task)的库,它提供了一些额外的功能,特别是在异步编程方面。这个库引入了一些新的方法和功能,包括:ConfigureAwait:它引入了ConfigureAwait方法,允许你在任务之间配置不同的上下文(例如,同步上下文或异步上下文),以便更好地......
  • dotnet 记 TaskCompletionSource 的 SetException 可能将异常记录到 UnobservedTaskEx
    本文将记录dotnet的一个已知问题,且是设计如此的问题。假定有一个TaskCompletionSource对象,此对象的Task没有被任何地方引用等待。在TaskCompletionSource被调用SetException或TrySetException方法时,将会记录一个存在异常且未捕获的Task对象。此Task对象将会在被G......
  • mysql 创建定时器,每天晚上1点钟调用存储过程proc_task
    在MySQL中,你可以使用事件调度器(EventScheduler)来创建定时器,以在指定时间自动执行存储过程。以下是在每天晚上1点钟调用存储过程proc_task的示例:首先,确保MySQL事件调度器已经启用。如果尚未启用,可以在MySQL客户端中执行以下命令:SETGLOBALevent_scheduler=ON;然后,创......
  • How to automatically run a scheduled task every hour in Node.js All In One
    HowtoautomaticallyrunascheduledtaskeveryhourinNode.jsAllInOne如何在Node.js中每间隔一小时自动运行一个定时任务引用场景Node.js后台爬虫服务,定时爬去指定页面,抓取最新数据,并写入到数据库中;在同一个Node.js部署环境中,没有使用Linux的crontab权......
  • Flink 1.17教程:任务槽Task Slots和并行度的关系
    任务槽TaskSlots在ApacheFlink中,任务槽(TaskSlots)是指可用于执行并行任务的资源单元。每个任务槽可以看作是一个可用的执行线程或处理单元,用于并行执行作业的不同部分。通俗来说,可以将任务槽想象成一个工作台,而每个工作台上都可以同时进行一项任务。任务槽的数量决定了同时可以......
  • AtCoder Beginner Contest 201 E - Xor Distances
    E-XorDistances原题链接题意:设dist(i,j)即i到j之间路径的异或和,求树上所有两点之间dist(i,j)的和思路:dist(i,j)=dist(i,1)^dist(j,1)根据异或性质相同的部分会被消掉用bfs求得dist(i,1)优化两层i,j的枚举:通过遍历每个数的每一位1的个数cnt,以及0的个数n-cnt,从而在1^0=1......