【题解】Luogu P5342 [TJOI2019]甲苯先生的线段树
原题传送门
挺有趣的一道题
\(c=1\),暴力求出点权和n即可
\(c=2\),先像\(c=1\)一样暴力求出点权和n,考虑有多少路径点权和也为n
考虑设x为路径的转折点,\(L\)为\(x\)向左儿子走的长度,\(R\)为\(x\)向右儿子走的长度。易知当\(L,R\)确定时,有唯一的\(x\)对应
以\(x\)为转折点,\(L,R\)为向左/右儿子走的距离,这时点权和至少为\(Min=(2^{L+1}+2^{R+1}-3)x+2^R-1\)
此时x的取值一定珂以求出。考虑一下如何产生剩下\(n-Min\)的贡献,这个贡献一定是原来向左儿子走改成向右儿子走所带来的
我们珂以进行记忆化搜索求出答案,记录\(f[i][j][k]\)表示为向左/右儿子走的距离为\(i,j\)还差贡献为\(k\)的方案数(注意:答案要减去原来已有的那个解)
#include <bits/stdc++.h>
#define ll long long
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline ll read()
{
register ll x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register ll x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
inline int Max(register int x,register int y)
{
return x>y?x:y;
}
inline int dep(register ll n)
{
int res=0;
while(n)
++res,n>>=1;
return res;
}
map<ll,ll> mp[55][55];
inline ll dfs(register int x,register int y,register ll z)
{
if(x<y)
x^=y^=x^=y;
if(z<0||z>(2ll<<x)+(2ll<<y)-x-y-4)
return 0;
if(!x&&!y)
return !z;
if(mp[x][y].count(z))
return mp[x][y][z];
return mp[x][y][z]=dfs(x-1,y,z)+dfs(x-1,y,z-(1ll<<x)+1);
}
int T,d,c;
ll a,b,n,ans;
int main()
{
T=read();
while(T--)
{
n=0;
d=read(),a=read(),b=read(),c=read();
while(a!=b)
{
if(a>b)
n+=a,a>>=1;
else
n+=b,b>>=1;
}
n+=a;
if(c==1)
{
write(n),puts("");
continue;
}
ans=0;
if(dep(n)<=d)
++ans;
for(register int l=1;l<=d;++l)
{
ll k=(2ll<<l)-1;
if(k<=n&&dep(n/k)+l<=d)
ans+=dfs(l,0,n%k);
}
for(register int l=1;l<=d;++l)
for(register int r=1;r<=d;++r)
{
ll k=(2ll<<l)+(2ll<<r)-3,b=(1ll<<r)-1;
if(k+b<=n&&dep((n-b)/k)+Max(l,r)<=d)
ans+=dfs(l-1,r-1,(n-b)%k);
}
write(ans-1),puts("");
}
return 0;
}
【题解】Luogu P5342 [TJOI2019]甲苯先生的线段树的更多相关文章
- luogu P5342 [TJOI2019]甲苯先生的线段树
传送门 你个好好的省选怎么可以出CF原题啊,你们这个题害人不浅啊,这样子出题像极了cxk,说到cxk,我又想起了他是NBA形象大使,跟我是西游文化大使一样一样的,今年下半年... 别说了,jinsai ...
- p5342 [TJOI2019]甲苯先生的线段树
分析 代码 #include<bits/stdc++.h> using namespace std; #define int long long ],yy[],cnt1,cnt2; ][ ...
- [TJOI2019] 甲苯先生的线段树
臭名昭著的巧合:CF750G 题意:在无限深度的一颗线段树中询问编号和为S的简单路径条数. 题解传送门 这道题相当于在原来基础上多了询问两点间简单路径的编号的的问题. 直觉告诉我们只需要求出两点在线段 ...
- [LOJ3109][TJOI2019]甲苯先生的线段树:DP
分析 首先,请允许我 orz HN队长zsy.链接 我们发现树上的链有两种类,一类是直上直下的,一类不是直上直下的(废话).并且,如果我们确定了左侧和右侧的链的长度和整条链上所有节点的编号之和,那么这 ...
- 【LOJ】#3109. 「TJOI2019」甲苯先生的线段树
LOJ#3109. 「TJOI2019」甲苯先生的线段树 发现如果枚举路径两边的长度的话,如果根节点的值是$x$,左边走了$l$,右边走了$r$ 肯定答案会是$(2^{l + 1} + 2^{r + ...
- 【题解】P4247 [清华集训]序列操作(线段树修改DP)
[题解]P4247 [清华集训]序列操作(线段树修改DP) 一道神仙数据结构(DP)题. 题目大意 给定你一个序列,会区间加和区间变相反数,要你支持查询一段区间内任意选择\(c\)个数乘起来的和.对1 ...
- 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)
[题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...
- 【题解】Luogu P5338 [TJOI2019]甲苯先生的滚榜
原题传送门 这题明显可以平衡树直接大力整,所以我要说一下线段树+树状数组的做法 实际线段树+树状数组的做法也很暴力 我们先用树状数组维护每个ac数量有多少个队伍.这样就能快速求出有多少队伍ac数比现在 ...
- luogu P5338 [TJOI2019]甲苯先生的滚榜
传送门 首先,排名系统,一看就知道是原题,可以上平衡树来维护 然后考虑一种比较朴素的想法,因为我们要知道排名在一个人前面的人数,也就是AC数比他多的人数+AC数一样并且罚时少的人数,所以考虑维护那两个 ...
随机推荐
- ffmpeg结合SDL编写播放器(二)
我们将对帧数据做一些处理,比如将每一帧的 图像转为jpg或者bmp或者ppm等格式保存下来. 举例:在ffmpeg-2.8.8文件夹下编写test.c程序 /* test.c */ #include& ...
- webpack4.0构建项目流程
webpack4.0构建项目流程,具体的就不一一唠叨了,这里给出构建流程步骤: 流程大图: 下载高清大图
- [Gamma]Scrum Meeting#2
github 本次会议项目由PM召开,时间为5月27日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客,组织例会 撰写博客,组织例会 swoip 前端显示屏幕,翻译 ...
- mysql8.0:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
忽然注意到的情况: 2018/7/19至2018/9/13之间发布的7.1.20.7.1.21.7.1.22和7.2.8.7.2.9.7.2.10这六个版本提供的对caching_sha2_passw ...
- yum 安装指定版本Docker
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_39553910/artic ...
- sql server中raiserror的用法(动态参数传值)
1.raiserrror定义: 返回用户定义的错误信息并设系统标志,记录发生错误.通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目, 或者使用用户指定的严重度和状 ...
- WebRTC搭建前端视频聊天室——信令篇
这篇文章讲述了WebRTC中所涉及的信令交换以及聊天室中的信令交换,主要内容来自WebRTC in the real world: STUN, TURN and signaling,我在这里提取出的一 ...
- Django入门2开发工具pycharm的配置
在pycharm中新建django项目 查看django是否安装成功 运行django 设置pycharm快捷键 设置python模板,新建的python文件就会自动生成一些信息 设置django启动 ...
- Ubuntu 上编译opencv_contrib模块for Android
https://blog.csdn.net/ipfpm/article/details/81132144 [ubuntu]Ubuntu中Android SDK下载跟配置 android24的版本 (1 ...
- 9个PNG透明图片免费下载网站推荐
9个PNG透明图片免费下载网站推荐 酷站推荐 2017.08.06 13:47 png格式的图片因为去掉了的背景,方便使用在任何颜色的背景,所以对于从事设计师的朋友来说,经常会用到png透明图片.相信 ...