首页 > 其他分享 >C. Even Subarrays

C. Even Subarrays

时间:2024-08-07 14:19:40浏览次数:18  
标签:Even 平方 xor 前缀 int Subarrays 个数 异或

原题链接

题解

这题用到的知识点很多, 思维+前缀异或+容斥原理。

1、题目告诉我们要找 被除数个数 是偶数个的异或和,那么什么数的 被除数 有偶数个?

答案:非完全平方数。

2、非完全平方数太多了,不好求。而我们又知道 所有序列 个数为(n+1)*n/2 所以我们只要求出序列异或和为完全平方数的个数即可。

注意,由于异或的性质,n个 <=n 的数异或结果 <=2n。所以我们要遍历2n以内的所有完全平方数。

3、前缀异或的应用:我们创建一个异或前缀和数组,再统计每个前缀的值的出现次数。  然后枚举右端点,接着枚举  ≤ 2n 的完全平方数,由异或前缀和数组可以得到符合条件的左端点个数,累加即可。

code 

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int a[N],n,xor_a[N];

void solve(){
    cin>>n;
    for (int i=1;i<=n;i++){
        cin>>a[i];
        xor_a[i]=xor_a[i-1]^a[i];
    }
    
    int vis[n<<1+5];
    memset(vis,0,sizeof(vis));
    vis[0]=1;
    
    int up=sqrt(n<<1);
    ll sum=(ll(n)+1ll)*ll(n)/2ll;
    for (int i=1;i<=n;i++){
        for (int j=0;j<=up;j++){
            sum-=ll(vis[(j*j)^xor_a[i]]);
        }
        vis[xor_a[i]]++;
    }
    
    cout<<sum<<endl;
}

int main(){
    int t;
    cin>>t;
    while (t--){
        solve();
    }
    return 0;
}

 

标签:Even,平方,xor,前缀,int,Subarrays,个数,异或
From: https://www.cnblogs.com/purple123/p/18346939

相关文章

  • Number of k-good subarrays
    我们发现,如果我们将满足题意的点在数轴上标出,那么我们可以获得若干个连续段。对于一个长度为\(l\)的连续段,他对答案的贡献就是\(\frac{l(l+1)}{2}\),我们把所有连续段的贡献加起来就得到了答案于是我们发现这个可以拆分成子问题,具体见这篇题解。\(sol(n-mx,k-1)\)就是拆分成的子问......
  • LeetCode | 209 MinimumSizeSubarraySum
    分析本题中是找与target相符的最小连续的子数组和,找一个能够容纳target这么大的最小子区间。虽然本节引入了滑动窗口的概念,可我更偏好于,这是一只毛毛虫在数组上的移动,找到最小的容纳自己位置的地方target可看作毛虫本身的重量,数组中的每个元素值表示可承受的重量,right右指针看......
  • C. Even Subarrays
    原题链接题解易得当区间异或和不为完全平方数的时候合法朴素做法:遍历所有区间,看看异或和是不是完全平方数优化:异或是可以交换运算顺序的,如果区间\([l,r]\)异或和为完全平方数,那么代表\(pre[r]\opluspre[l-1]==k\)其中k为完全平方数也就是说,\(pre[r]\oplusk==pre[l......
  • [Typescript] handle event.target type in Form
    TheerrorweencounteredinthischallengewasthattheEventTarget|nulltypewasincompatiblewiththerequiredparameteroftypeHTMLFormElement.Theproblemstemsfromthefactthatthesetypesdon'tmatch,andnullisnotpermitted:constdata......
  • Python. 协程asyncio、gevent
    1、协程是一种轻量级的并发机制,允许你在单个线程内模拟并发执行多个任务。协程非常适合用于I/O密集型任务,如网络请求、文件读写等,在等待I/O操作完成时,协程可以继续执行其他任务而不是阻塞。生成器:协程的基础是生成器(generator)。生成器是一种特殊的迭代器,它可以使用 yi......
  • 【libevent】libevent简介
    1、Libevent1.1简介Libevent是一个用C语言编写的、轻量级的开源高性能事件驱动网络库。基本的socket编程是阻塞/同步的,每个操作除非已经完成或者出错才会返回,这样对于每一个请求,要使用一个线程或者单独的进程去处理,系统资源没法支撑大量的请求,于是各系统分别提出了基于异步/c......
  • DB2-Db2StreamingChangeEventSource
    提示:Db2StreamingChangeEventSource类主要用于从IBMDb2数据库中读取变更数据捕获(CDC,ChangeDataCapture)信息。CDC是一种技术,允许系统跟踪数据库表中数据的更改,这些更改可以是插入、更新或删除操作。在大数据和实时数据处理场景中,CDC可以用来同步数据到其他系统,比......
  • P3131 [USACO16JAN] Subsequences Summing to Sevens S
    传送锚点:[USACO16JAN]SubsequencesSummingtoSevensS-洛谷题目描述FarmerJohn's\(N\)cowsarestandinginarow,astheyhaveatendencytodofromtimetotime.EachcowislabeledwithadistinctintegerIDnumbersoFJcantellthemapart.FJwould......
  • netty入门-3 EventLoop和EventLoopGroup,简单的服务器实现
    文章目录EventLoop和EventLoopGroup服务器与客户端基本使用增加非NIO工人NioEventLoop处理普通任务与定时任务结语EventLoop和EventLoopGroup二者大概是什么这里不再赘述,前一篇已简述过。不理解也没关系。下面会简单使用,看了就能明白是什么这篇文章只说NioEvent......
  • 一文彻底搞懂浏览器事件机制、事件委托、事件冒泡、事件循环、Event Loop、react事件
    一、事件是什么?事件模型?事件是用户操作网页时发生的交互动作,比如click/move,事件除了用户触发的动作外,还可以是文档加载,窗口滚动和大小调整。事件被封装成一个event对象,包含了该事件发生时的所有相关信息(event的属性)以及可以对事件进行的操作(event的方法)。事件是用......