zoukankan      html  css  js  c++  java
  • Xorto

    Xorto

    题目描述

    给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为0。

    输入描述:

    第一行一个数n表示数组长度;
    第二行n个整数表示数组;
    1<=n<=1000,0<=数组元素<100000。

    输出描述:

    一行一个整数表示答案。
    示例1

    输入

    3
    0 0 0

    输出

    5

    说明

    ([1,1],[2,2]),([1,1],[3,3]),([1,1],[2,3]),([1,2],[3,3]),([2,2],[3,3])

    可以用像前缀和一样做,也可以依次求。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int N = 1010;
     5 int a[N], ans[1000100];
     6 int main() {
     7     int n;scanf("%d", &n);
     8     for(int i = 1; i <= n; i ++) {
     9         scanf("%d", &a[i]);
    10     }
    11     ll sum = 0;
    12     for(int i = 1; i <= n; i ++) {
    13         int tmp = 0;
    14         for(int j = i; j <= n; j ++) {
    15             tmp ^= a[j];
    16             if(ans[tmp]) sum += 1LL*ans[tmp];
    17         }
    18         tmp = 0;
    19         for(int j = i; j >= 1; j --) {
    20             tmp ^= a[j];
    21             ans[tmp] ++;
    22         }
    23     }
    24     printf("%lld
    ",sum);
    25     return 0;
    26 }
  • 相关阅读:
    poj 1200 crasy search
    cdoj 1092 韩爷的梦
    fzu 2257 saya的小熊饼干
    zoj 3950 how many nines
    zoj 3963 heap partion
    fzu 2256 迷宫
    fzu 2253 salty fish
    hdu 2473 Junk-Mail Filter
    codeforces 129B students and shoes
    hdu 3367 Pseudoforest
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7668616.html
Copyright © 2011-2022 走看看