zoukankan      html  css  js  c++  java
  • Codeforces Round #539 (Div. 2) C Sasha and a Bit of Relax

    题中意思显而易见,即求满足alal+1amid=amid+1amid+2ar且l到r的区间长为偶数的这样的数对(l,r)的个数。

    若alal+1amid=amid+1amid+2ar,我们可以推出alal+1amiamid+1amid+2ar=0;反推也是可以成立的。

    我们已知任何数0对异或都等于本身。所以当前数异或一段数之后等于本身,那么异或之后的这段数肯定是异或为0的,我们只需要知道这一段是不是长度为偶数即可。

    我们从头异或一道,若异或到某个数之后这个数在曾经出现过,我们就加上它可组成偶数段所有出现的次数即可。若全部异或为0,也是一种情况,我们假设0一开始也出现一次就好了。

    用两个map统计奇偶(代码就能看懂)

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<string>
     5 #include<algorithm>
     6 #include<set>
     7 #include<map>
     8 using namespace std;
     9 typedef long long ll;
    10 map<ll,ll>p1;
    11 map<ll,ll>p2;
    12 ll a[300005];
    13 int main()
    14 {
    15     ll n,t,k,i,j;
    16     while(scanf("%I64d",&n)!=EOF)
    17     {
    18         k=0;
    19         p1.clear();
    20         p2.clear();
    21         scanf("%I64d",&j);
    22         p2[j]=1;
    23         p1[0]=1;
    24         for(i=1;i<n;i++)
    25             {
    26                 scanf("%I64d",&t);
    27                 j^=t;
    28                 if(i%2==0)
    29                 {
    30                     if(p2[j]!=0)
    31                         k+=p2[j];
    32                         p2[j]++;
    33                 }
    34                 else
    35                 {
    36 
    37                     if(p1[j]!=0)
    38                         k+=p1[j];
    39 
    40                         p1[j]++;
    41                 }
    42             }
    43             printf("%I64d
    ",k);
    44     }
    45 }
    View Code
  • 相关阅读:
    WebBrowser
    hibernate关系映射(多对多)
    hibernate关系映射(多对一)
    使用maven构建hibernate
    使用maven构建web项目
    Chapter 6 ViewController
    Chapter 5 带颜色的同心圆
    Symbol(s) not found for architecture arm64
    反射实现NSCodingProtocol 帮助类
    UITableView默认选中第一行
  • 原文地址:https://www.cnblogs.com/Carits/p/10393159.html
Copyright © 2011-2022 走看看