首页 > 其他分享 >F. Equal XOR Segments

F. Equal XOR Segments

时间:2024-05-04 19:55:05浏览次数:15  
标签:pre XOR cout int Segments Equal cin 异或 区间

原题链接

题解

1.如果能分成偶数个区间,那么一定能分为两个区间
2.如果能分为奇数个区间,那么一定能分为三个区间
3.能分为两个区间,说明区间异或和为 \(0\)
4.能分为三个区间,这三个区间分别为区间 \(a,b,c\) ,则 \(ab\) 区间异或和为零, \(bc\) 区间异或和为零

code

#include<bits/stdc++.h>
using namespace std;

const int MAXN = 200005;
int pre[MAXN] = {0};


int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--) {
        int n, q;
        cin >> n >> q;
        map<int,vector<int> > id;
        id[0].push_back(0);
        for (int i = 1; i <= n; i++)
        {
            int x;
            cin>>x;
            pre[i]=pre[i-1]^x;
            id[pre[i]].push_back(i);
        }
        while(q--)
        {
            int l,r;
            cin>>l>>r;
            if(pre[r]==pre[l-1]) cout<<"YES\n";
            else
            {
                int itl=*(lower_bound(id[pre[l-1]].begin(),id[pre[l-1]].end(),r)-1);//如果[l,r]区间异或和为零,代表前缀和pre[l-1]==pre[r]
                int itr=*(lower_bound(id[pre[r]].begin(),id[pre[r]].end(),l));
                //printf("itl:%d  itr:%d\n",itl,itr);
                if(itl>=itr&&itl!=l&&itr!=r) cout<<"YES\n";
                else cout<<"NO\n";
            }
        }
        cout<<"\n";
    }
    return 0;
}

标签:pre,XOR,cout,int,Segments,Equal,cin,异或,区间
From: https://www.cnblogs.com/pure4knowledge/p/18172621

相关文章

  • Java中“==”与“equals”在字符串比较中的应用与分析
    packagecom.aiit.helloworld;publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Strings1="a"+"b"; Strings2=newString(s1); if(s1==s2)//false System.out.println("doit~~~"); if(s1.equals(s......
  • Jumping Through Segments
    题目:链接:https://www.luogu.com.cn/problem/CF1907D大致思路:二分模拟关键点:①确定二分区间:最小值为第一次跳的左边界,最大值为连续两个线段的最远值(注意,应该有四种情况:左1减右1,左2减右1,左1减右2,左2减右2,取绝对值);②确定如何模拟:递推:假定跳跃长度≤k(mid),那么下一个最远就是ra+......
  • 攻防世界-难度1- xxxorrr
    攻防世界-逆向-难度1根据提示应该是异或加密,找到密文和密钥,再异或回去就得到原文。参考https://blog.csdn.net/qq_63699339/article/details/130657034官方wp逆向解法梳理一下程序执行逻辑1.在main函数之前的init-array段首先执行了sub84A在ELF(ExecutableandLinkabl......
  • CF1709E XOR Tree
    linkSolution:PART1:转化首先套路地预处理出每个节点到根节点(\(1\)号节点)路径上的点权异或和\(w[u]\)。可以发现题意容易转化为:给定一棵\(n\)个节点的树,问你最少可以把它分成多少个联通块,使得每个连通块中的节点两两路径上的异或和不为0。易知对于一个节点,若它要被割......
  • CF1591F Non-equal Neighbours
    题面:thissolution:容斥神仙题qwq考虑全集-补集,此时补集就是一些集合的并,可使用容斥设至少\(j\)个点满足\(b[i]==b[i+1]\)时方案数为\(f_j\)直接求不好求,考虑转化:有\(j\)个点时就把原序列隔成了\(n-j\)段,段内无所谓,但是用于分割的之间的段需要一样此时自然而然的......
  • Codeforces 1863F Divide, XOR, and Conquer
    记\(s_{l,r}=\oplus_{i=l}^ra_i\)。考虑到这个相当于是\([l,r]\)内分裂区间,可以考虑区间\(\text{DP}\)。即记\(f_{l,r}\)为\([l,r]\)区间是否能被遍历到。转移考虑对于\([l,r]\),考虑在已知的条件下(\(len\ger-l+1\))\([l,r]\)是否合法。即到这个状态......
  • 什么是hashCode 以及 hashCode()与equals()的联系
    1、什么是hashCode:hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址,如Hashtable、hashMap中。为什么说hashcode可以提高检索效率呢?我们先看一个例......
  • ICPC World Finals Luxor 游记
    流水账开场我先看了一下J,简单贪了一下,没有什么结果,就丢给pb了。然后pb这时候抛过来一个C,我上去写完发现过不去样例,有点小爆。过了一会儿pb发现样例输入藏东西了,我改了改就过样例了,然后交了一发wa,血压有点拉起来了。fsy这时候上去签了A,我当时看了一遍C没瞪出问题,然......
  • Codeforces 1824C LuoTianyi and XOR-Tree
    考虑到肯定如果能在这个节点让子树的值尽量相同肯定更好,这样子不会与上面的操作相冲突。于是有个\(\text{DP}\)的思路。记\(f_{u,i}\)为\(u\)子树内叶子节点的值都变为\(i\)的最小代价。这个有一个很好的性质,就是\(\maxf_{u,i}-\minf_{u,i}=1\)。这是因为考......
  • CF1788F XOR, Tree, and Queries
    CF1788FXOR,Tree,andQueries边权转点权+染色+构造首先对于限制,可以转化。设\(f_u\)表示\(1\)到\(u\)的异或和,那么限制\((u,v,w)\)就可以表示为\(f_u\oplusf_v=w\)。也就意味这如果我们将限制\((u,v,w)\)连边,要考虑的就变成\(f_u\)的赋值问题。这一步将边权转......