传送门

考虑简单的容斥

设 $F(n,m)$ 表示 $a \in [1,n] , b \in [1,m]$ 的满足 $a+b=a \text{ xor } b$ 的数对的数量

那么答案即为 $F(r,r)-2F(l-1,r)+F(l-1,l-1)$

意思就是总方案减去 $a,b$ 至少一个数小于 $l$ 再加上 $a,b$ 都小于 $l$ 的方案

然后现在考虑求 $F$

首先显然 $a+b=a \text{ xor } b$ 意思就是二进制下不存在同时为 $1$ 的位

那么可以考虑简单的数位 $dp$,设 $f[i][0/1][0/1]$ 表示从高到低位填了 $i$ 位,$a$ 是否贴着上限 $n$ , $b$ 是否贴着上限 $m$ ,时的合法数对 $a,b$ 的方案数

那么转移就枚举下一位 $a$ 填的 $0$ 还是 $1$ , $b$ 填的 $0$ 还是 $1$ ,顺便保证一下满足限制就行了

代码参考:jiangly

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
ll solve(int n,int m)//注意此时的n,m是开区间
{
if(n<||m<) return ;
ll f[][][]; int p=;
f[p][][]=f[p][][]=f[p][][]=; f[p][][]=;
//0表示没贴着上限,1表示贴着上限
for(int i=;i>=;i--)
{
p^=; memset(f[p],,sizeof(f[p]));//滚动数组
for(int ln=;ln<=;ln++)
for(int lm=;lm<=;lm++)
for(int x=;x<=;x++)
for(int y=;x+y<=;y++)
if( ((!ln)||x<=((n>>i)&)) && ((!lm)||y<=((m>>i)&)) )
f[p][ln & ( x == ((n>>i)&) )][lm & ( y == ((m>>i)&) )] +=
f[p^][ln][lm];
}
return f[p][][];//不包括恰好等于n,m的情况
}
int main()
{
int T=read();
while(T--)
{
int l=read(),r=read();
printf("%lld\n",solve(r+,r+)-solve(l,r+)*+solve(l,l));//开区间,右端点集体+1
}
return ;
}

Codefroces 1245 F. Daniel and Spring Cleaning的更多相关文章

  1. [cf 1245 F] Daniel and Spring Cleaning

    题意: 求区间$[l,r]$内有多少有序数对$(a,b)$满足$a+b=a\bigoplus b$. $l,r\leq 10^9$. 题解: 有用的就一句话: 求区间内一元组可以一维容斥,同理求二元组 ...

  2. Codeforces Round #597 (Div. 2) F. Daniel and Spring Cleaning 数位dp

    F. Daniel and Spring Cleaning While doing some spring cleaning, Daniel found an old calculator that ...

  3. codeforces 597div2 F. Daniel and Spring Cleaning(数位dp+二维容斥)

    题目链接:https://codeforces.com/contest/1245/problem/F 题意:给定一个区间(L,R),a.b两个数都是属于区间内的数,求满足 a + b = a ^ b ...

  4. CF1245F: Daniel and Spring Cleaning

    CF1245F: Daniel and Spring Cleaning 题意描述: 给定区间\([L,R]\),其中 \((0\leq L,R\leq 10^9)\),问在区间内有多少数对\((x,y ...

  5. CodeForces - 1245F Daniel and Spring Cleaning (数位DP)

    While doing some spring cleaning, Daniel found an old calculator that he loves so much. However, it ...

  6. Good Bye 2015 F - New Year and Cleaning

    F - New Year and Cleaning 这题简直是丧心病狂折磨王.. 思路:容易想到这样一个转换,把整个矩形一起移动,矩形移出去的时候相当于一行或者一列. 为了优化找到下一个消去的点,我先 ...

  7. Codeforces Round #597 (Div. 2)

    A - Good ol' Numbers Coloring 题意:有无穷个格子,给定 \(a,b\) ,按以下规则染色: \(0\) 号格子白色:当 \(i\) 为正整数, \(i\) 号格子当 \( ...

  8. 并不对劲的CF1245E&F:Cleaning Ladders

    CF1245 E. Hyakugoku and Ladders 题目大意 有一个10 \(\times\) 10的网格,你要按这样的路径行走: 网格中有一些单向传送门,每个传送门连接的两个格子在同一列 ...

  9. some problem

    CF1257F Make Them Similar $solution:$ 折半搜索后考虑如何维护两个数组的和,可以将 $A$ 中每个数减 $A_1$ ,$B$ 中每个数被减 $B_1$ ,$map$ ...

随机推荐

  1. golang通过ssh实现远程文件传输

    使用ssh远程操作文件, 主要是创建ssh, 直接上代码 import ( "fmt" "github.com/pkg/sftp" "golang.o ...

  2. Delphi BASE64单元EncdDecd的修改

    Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...

  3. Python 自学笔记(七)

    1.定义函数和调用函数 1-1.定义函数 定义函数的语法书写:def 函数名(参数名)(注:括号内可以为空,也可以为多个参数,多个参数间用逗号隔开即可) 由上可以看出,函数默认返回None 2.函数的 ...

  4. 当前主流的小型嵌入式 GUI

    当前主流的嵌入式 GUI当前主流的小型嵌入式 GUI 主要有:emWin(uCGUI),TouchGFX,Embedded Wizard GUI,uGFX 和 MicroChip GUI. 当然,还有 ...

  5. OpenTK学习笔记(2)-工作窗口的三种方法创建方法(winfrom下类的形式创建)

    参考资料: https://www.codeproject.com/Articles/1167212/OpenGL-with-OpenTK-in-Csharp-Part-Initialize-the- ...

  6. SOCKET_CONNECT_TIMEOUT is the timeout for the connection to be established and SOCKET_TIMEOUT

    https://github.com/niwinz/django-redis/blob/master/doc/content.adoc#32-socket-timeout 3.2. Socket ti ...

  7. windows的mysql无法启动 服务没有报告任何错误

    相信很多人都遇到过安装Mysql的时候出现各种各样的问题,今天小编就教大家解决window下mysql服务没有报告任何错误的情况下无法启动 的问题.本文所用的mysql版本是5.7以上版本,解决方法: ...

  8. (二)第一个Servlet

    一.预备知识 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...

  9. 文件被sourceTree忽略了怎么办

  10. svn如何撤销之前某个版本所做的改变

    撤销这个版本所做的修改:(撤销这个版本所做的修改) 右键项目svn->show log->revert changes from this revision 如果要恢复到某个版本:(这个版 ...