NC14414 小AA的数列(二进制枚举)

小AA的数列

https://ac.nowcoder.com/acm/problem/14414

题目链接

题意:



题解:

























AC代码

/*
    Author:zzugzx
    Lang:C++
    Blog:blog.csdn.net/qq_43756519
*/
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int mod=1e9+7;
//const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=1e6+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};

ll c[2][2],a[maxn];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int n,l,r;
    cin>>n>>l>>r;
    if(l==r&&l&1){cout<<0;return 0;}
    if(l&1)l++;if(r&1)r--;
    for(int i=1;i<=n;i++)cin>>a[i],a[i]^=a[i-1];
    ll ans=0;
    for(int i=0;i<=31;i++){
        memset(c,0,sizeof c);
        for(int j=1;j<=n;j++){
            if(j>=l)c[j&1][(a[j-l]>>i)&1]++;
            ans=(ans+c[j&1][(a[j]>>i)&1^1]*(1ll<<i)%mod)%mod;
            if(j>=r)c[j&1][(a[j-r]>>i)&1]--;
        }
    }
    cout<<ans;
    return 0;
}
每日一题 文章被收录于专栏

每日一题

全部评论

相关推荐

评论
2
1
分享
牛客网
牛客企业服务