• 2019 ICPC南昌邀请赛 网络赛 K. MORE XOR


    说明

    • (oplus x​)为累异或
    • $ x^{oplus(a)}​$为异或幂

    题意&解法

    题库链接

    $ f(l,r)=oplus_{i=l}^{r} a[i]( ) g(l,r)=oplus_{i=l}{r}a[i]{oplus((i-l+1)*(r-i+1))}$

    (egin{alignat}{} w(l,r)&=oplus_{i=l}^{r}a[i]^{oplus(frac{(i-l+1)*(i-l+2)}2*frac{(r-i+1)*(i-l+2)}2)}&\&=egin{cases}a[l]oplus a[l+4]oplus cdotsoplus a[r]&len ext{%}4=1\a[l]oplus a[l+1]oplus s[l+4]oplus a[l+5]opluscdotsoplus a[r-1]oplus a[r]&len ext{%}4=2\a[l+1]oplus a[l+5]opluscdotsoplus a[r-1]&len ext{%}4=3\0&len ext{%}4=4end{cases}&(len=r-l+1)end{alignat})

    f(l,r)为异或和,g(l,r)(il-r的所有子区间中出现次数的异或幂) 的累异或,w(l,r)为(il-r的所有子区间的所有子区间中出现次数 的异或幂) 的累异或

    其他理解

    步骤

    1. 四组出前缀异或打表
    2. 按区间长度和l所在位置分组计算

    代码

    #include<cstdio>
    using namespace std;
    const int maxn=100005;
    int t,n,q,a[maxn],sum[maxn];
    inline int Sum(int l,int r)
    {
        if(l-4>=0)
            return sum[r]^sum[l-4];
        else
            return sum[r];
    }
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]),
                i-4>=0?sum[i]=sum[i-4]^a[i]:sum[i]=a[i];
            scanf("%d",&q);
            for(int i=0,l,r;i<q;i++)
            {
                int ans;
                scanf("%d%d",&l,&r);l--;r--;
                if((r-l+1)%4==1){//l...l+4...l+8...r
                    ans=Sum(l,r);
                }
                else if((r-l+1)%4==2){//l.l+1...l+4.l+5...r-1.r
                    ans=Sum(l,r-1)^Sum(l+1,r);
                }
                else if((r-l+1)%4==3){//l+1...l+5...r-1
                    ans=Sum(l+1,r-1);
                }
                else
                    ans=0;
                printf("%d
    ",ans);  
            }
            
        }
        return 0;
    }
    
  • 相关阅读:
    乱···
    分析不足,明确目标
    与寂寞有染,与爱情无关
    桃花运?桃花劫?
    诺基亚N91——4G硬盘+200万像素!!!
    【转载】我们什么时候结婚
    纪念新生命诞生
    【转载】为一套房子你要奋斗多少年
    【转载】一定要讲给你爱的人听的20个小故事
    快乐不快乐
  • 原文地址:https://www.cnblogs.com/intmian/p/10742890.html
Copyright © 2020-2023  润新知