zoukankan      html  css  js  c++  java
  • CodeForces

    题意:询问区间[l,r]上有多少个有序对(a,b)满足a+b=a xor b

    相加等于异或,言外之意就是两个数每一个二进制位上都不能同时为1,那就让两个数从最高位同时往下走好了,设两个数的f,g分别表示是否撞到上界或者下界,然后dp即可。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int N=3e5+10,inf=0x3f3f3f3f;
     5 ll dp[35][2][2][2][2];
     6 int l,r;
     7 int main() {
     8     int _;
     9     for(scanf("%d",&_); _--;) {
    10         scanf("%d%d",&l,&r);
    11         memset(dp,0,sizeof dp);
    12         dp[32][1][1][1][1]=1;
    13         for(int u=32; u>=1; --u)
    14             for(int f1=0; f1<=1; ++f1)
    15                 for(int g1=0; g1<=1; ++g1)
    16                     for(int f2=0; f2<=1; ++f2)
    17                         for(int g2=0; g2<=1; ++g2)
    18                             for(int i=0; i<=1; ++i)
    19                                 for(int j=0; j<=1; ++j) {
    20                                     if(i&&j)continue;
    21                                     if(f1&&i>(r>>(u-1)&1))continue;
    22                                     if(g1&&i<(l>>(u-1)&1))continue;
    23                                     if(f2&&j>(r>>(u-1)&1))continue;
    24                                     if(g2&&j<(l>>(u-1)&1))continue;
    25                                     int f11=f1&&i==(r>>(u-1)&1);
    26                                     int g11=g1&&i==(l>>(u-1)&1);
    27                                     int f22=f2&&j==(r>>(u-1)&1);
    28                                     int g22=g2&&j==(l>>(u-1)&1);
    29                                     dp[u-1][f11][g11][f22][g22]+=dp[u][f1][g1][f2][g2];
    30                                 }
    31         ll ans=0;
    32         for(int f1=0; f1<=1; ++f1)
    33             for(int g1=0; g1<=1; ++g1)
    34                 for(int f2=0; f2<=1; ++f2)
    35                     for(int g2=0; g2<=1; ++g2)
    36                         ans+=dp[0][f1][g1][f2][g2];
    37         printf("%lld
    ",ans);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    让你平步青云的10个谈话技巧
    瑞士心理学家和精神分析医师――荣格
    市场倍增理论
    淘宝网格,淘宝富人群
    波波的个人简历
    磁盘修复工具
    9种没结果的爱(未婚者必读)!!!
    网络投机市场
    网页数据抽取的方法介绍
    C#扩展方法试用
  • 原文地址:https://www.cnblogs.com/asdfsag/p/12686830.html
Copyright © 2011-2022 走看看