分析

 代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int xx[],yy[],cnt1,cnt2;
int dp[][][];
inline int work(int a,int b,int s,int c){
int i,j,k,d=max(max(a-,b),(int)log2(s)+1ll),x,y,z,g;
for(i=;i<=d;i++)
for(j=;j<=c;j++)
dp[i][j][]=dp[i][j][]=;
i=;
for(x=;x<=;x++)
for(y=;y<=;y++){
k=(x+y)>>,z=(x+y)&;
if(i==b-&&!y)continue;
if(z!=(s&))continue;
if(i>b-&&y)continue;
if(i>a-&&x)continue;
dp[i][x+y][k]++;
}
for(i=;i<=d;i++)
for(j=;j<=c;j++)
for(g=;g<=;g++)
if(dp[i-][j][g])
for(x=;x<=;x++)
for(y=;y<=;y++){
k=(x+y+g)>>,z=(x+y+g)&;
if(i==b-&&!y)continue;
if(z!=((s&(1ll<<i))?:))continue;
if(i>b-&&y)continue;
if(i>a-&&x)continue;
dp[i][j+x+y][k]+=dp[i-][j][g];
}
return dp[d][c][];
}
inline int sum(int x){
int res=x<<;
while(x)res-=(x&1ll),x>>=;
return res;
}
signed main(){
int x,y,z,d,c,i,j,k,t,x2,y2,s,a,b;
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld%lld",&d,&x,&y,&c);
cnt1=cnt2=;
x2=x,y2=y;
while(x2)xx[++cnt1]=(x2&),x2>>=;
while(y2)yy[++cnt2]=(y2&),y2>>=;
reverse(xx+,xx+cnt1+);
reverse(yy+,yy+cnt2+);
z=;
for(i=;i<=min(cnt1,cnt2);i++)
if(xx[i]==yy[i])z=(z<<)+xx[i];
else break;
s=sum(x)+sum(y)-sum(z)-sum(z>>);
if(c==){
printf("%lld\n",s);
continue;
}
int Ans=;
for(a=;a<d;a++)
for(b=;b<d;b++){
int v=(1ll<<(a+))+(1ll<<(b+))-;
z=s/v;
if(!z)continue;
if((int)log2(z)+max(a,b)+>d)continue;
k=s-z*v;
for(i=;i<=a+b;i++)
if((i+k)%==)Ans+=work(a,b,(i+k)>>,i);
}
printf("%lld\n",Ans-);
}
return ;
}

p5342 [TJOI2019]甲苯先生的线段树的更多相关文章

  1. luogu P5342 [TJOI2019]甲苯先生的线段树

    传送门 你个好好的省选怎么可以出CF原题啊,你们这个题害人不浅啊,这样子出题像极了cxk,说到cxk,我又想起了他是NBA形象大使,跟我是西游文化大使一样一样的,今年下半年... 别说了,jinsai ...

  2. 【题解】Luogu P5342 [TJOI2019]甲苯先生的线段树

    原题传送门 挺有趣的一道题 \(c=1\),暴力求出点权和n即可 \(c=2\),先像\(c=1\)一样暴力求出点权和n,考虑有多少路径点权和也为n 考虑设x为路径的转折点,\(L\)为\(x\)向左 ...

  3. [TJOI2019] 甲苯先生的线段树

    臭名昭著的巧合:CF750G 题意:在无限深度的一颗线段树中询问编号和为S的简单路径条数. 题解传送门 这道题相当于在原来基础上多了询问两点间简单路径的编号的的问题. 直觉告诉我们只需要求出两点在线段 ...

  4. [LOJ3109][TJOI2019]甲苯先生的线段树:DP

    分析 首先,请允许我 orz HN队长zsy.链接 我们发现树上的链有两种类,一类是直上直下的,一类不是直上直下的(废话).并且,如果我们确定了左侧和右侧的链的长度和整条链上所有节点的编号之和,那么这 ...

  5. 【LOJ】#3109. 「TJOI2019」甲苯先生的线段树

    LOJ#3109. 「TJOI2019」甲苯先生的线段树 发现如果枚举路径两边的长度的话,如果根节点的值是$x$,左边走了$l$,右边走了$r$ 肯定答案会是$(2^{l + 1} + 2^{r + ...

  6. 洛谷P5338 [TJOI2019]甲苯先生的滚榜

    原题链接洛谷P5338 [TJOI2019]甲苯先生的滚榜 题目描述 甲苯先生在制作一个online judge,他发现做比赛的人们很关心自己的排名(显而易见),在acm赛制的比赛中,如果通过题目数量 ...

  7. 洛谷P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一 ...

  8. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  9. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

随机推荐

  1. airtest自动化中的poco+python连接手机实现ui自动化

    airtest:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html官网地址 AirtestIDE:跨平台的UI自动化测试编 ...

  2. docker--docker架构

    4 docker 架构 Docker uses a client-server architecture. The Docker client talks to the Docker daemon, ...

  3. 红黑树插入操作---以JDK 源码为例

    红黑树遵循的条件: 1.根节点为黑色. 2.外部节点(叶子节点)为黑色. 3.红色节点的孩子节点为黑色.(由此,红色节点的父节点也必为黑色) 4.从根节点到任一外部节点的路径上,黑节点的数量相同. 节 ...

  4. HDFS中NameNode发生故障没有备份从SecondNameNode恢复

    1.Secondary NameNode目录结构 Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照. 在/opt/module/hadoop ...

  5. 工作时使用的vim配置

    """"""""""""""""&quo ...

  6. addEventListener 的三个参数

    addEventListener 有三个参数:第一个参数表示事件名称(不含 on,如 "click"):第二个参数表示要接收事件处理的函数:第三个参数为 useCapture,本文 ...

  7. 攻防世界--srm-50

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/6df7b29f8f18437887ff4be163b567d5.exe 1.准备 获取 ...

  8. Linux时间命令date

    date:打印当前时间 date "+定制信息":自定义格式打印时间 - date "+%H":打印当前时间的小时数 - date "+%H%M%S& ...

  9. vue路由守卫配合权限,白名单

    router.beforeEach(async(to, from, next) => { // 进度条开始 NProgress.start() // 确认用户是否已登录(获取它的token值,这 ...

  10. Dubbo学习源码总结系列五--集群负载均衡

            Dubbo提供了哪些负载均衡机制?如何实现的?          LoadBalance接口:可以看出,通过SPI机制默认为RandomLoadBalance,生成的适配器类执行sel ...