Codefroces 1245 F. Daniel and Spring Cleaning
考虑简单的容斥
设 $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的更多相关文章
- [cf 1245 F] Daniel and Spring Cleaning
题意: 求区间$[l,r]$内有多少有序数对$(a,b)$满足$a+b=a\bigoplus b$. $l,r\leq 10^9$. 题解: 有用的就一句话: 求区间内一元组可以一维容斥,同理求二元组 ...
- 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 ...
- codeforces 597div2 F. Daniel and Spring Cleaning(数位dp+二维容斥)
题目链接:https://codeforces.com/contest/1245/problem/F 题意:给定一个区间(L,R),a.b两个数都是属于区间内的数,求满足 a + b = a ^ b ...
- CF1245F: Daniel and Spring Cleaning
CF1245F: Daniel and Spring Cleaning 题意描述: 给定区间\([L,R]\),其中 \((0\leq L,R\leq 10^9)\),问在区间内有多少数对\((x,y ...
- CodeForces - 1245F Daniel and Spring Cleaning (数位DP)
While doing some spring cleaning, Daniel found an old calculator that he loves so much. However, it ...
- Good Bye 2015 F - New Year and Cleaning
F - New Year and Cleaning 这题简直是丧心病狂折磨王.. 思路:容易想到这样一个转换,把整个矩形一起移动,矩形移出去的时候相当于一行或者一列. 为了优化找到下一个消去的点,我先 ...
- Codeforces Round #597 (Div. 2)
A - Good ol' Numbers Coloring 题意:有无穷个格子,给定 \(a,b\) ,按以下规则染色: \(0\) 号格子白色:当 \(i\) 为正整数, \(i\) 号格子当 \( ...
- 并不对劲的CF1245E&F:Cleaning Ladders
CF1245 E. Hyakugoku and Ladders 题目大意 有一个10 \(\times\) 10的网格,你要按这样的路径行走: 网格中有一些单向传送门,每个传送门连接的两个格子在同一列 ...
- some problem
CF1257F Make Them Similar $solution:$ 折半搜索后考虑如何维护两个数组的和,可以将 $A$ 中每个数减 $A_1$ ,$B$ 中每个数被减 $B_1$ ,$map$ ...
随机推荐
- golang通过ssh实现远程文件传输
使用ssh远程操作文件, 主要是创建ssh, 直接上代码 import ( "fmt" "github.com/pkg/sftp" "golang.o ...
- Delphi BASE64单元EncdDecd的修改
Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...
- Python 自学笔记(七)
1.定义函数和调用函数 1-1.定义函数 定义函数的语法书写:def 函数名(参数名)(注:括号内可以为空,也可以为多个参数,多个参数间用逗号隔开即可) 由上可以看出,函数默认返回None 2.函数的 ...
- 当前主流的小型嵌入式 GUI
当前主流的嵌入式 GUI当前主流的小型嵌入式 GUI 主要有:emWin(uCGUI),TouchGFX,Embedded Wizard GUI,uGFX 和 MicroChip GUI. 当然,还有 ...
- OpenTK学习笔记(2)-工作窗口的三种方法创建方法(winfrom下类的形式创建)
参考资料: https://www.codeproject.com/Articles/1167212/OpenGL-with-OpenTK-in-Csharp-Part-Initialize-the- ...
- 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 ...
- windows的mysql无法启动 服务没有报告任何错误
相信很多人都遇到过安装Mysql的时候出现各种各样的问题,今天小编就教大家解决window下mysql服务没有报告任何错误的情况下无法启动 的问题.本文所用的mysql版本是5.7以上版本,解决方法: ...
- (二)第一个Servlet
一.预备知识 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...
- 文件被sourceTree忽略了怎么办
- svn如何撤销之前某个版本所做的改变
撤销这个版本所做的修改:(撤销这个版本所做的修改) 右键项目svn->show log->revert changes from this revision 如果要恢复到某个版本:(这个版 ...