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
  • 相关阅读:
    贴一段微博上的小知识
    关于编译Qt以及驱动的一点总结吧
    一些服务器客户端的c例子
    android中DatePicker和TimePicker的使用
    Python标准库string模块《未完待续》
    Qt: SQL Programming
    和一个坑爹的项目组的经历
    linux一些杂项整理
    Qt中的QTableWidget
    Linux c学习进程基础学习
  • 原文地址:https://www.cnblogs.com/Carits/p/10393159.html
Copyright © 2011-2022 走看看