p5342 [TJOI2019]甲苯先生的线段树
分析
代码
- #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]甲苯先生的线段树的更多相关文章
- luogu P5342 [TJOI2019]甲苯先生的线段树
传送门 你个好好的省选怎么可以出CF原题啊,你们这个题害人不浅啊,这样子出题像极了cxk,说到cxk,我又想起了他是NBA形象大使,跟我是西游文化大使一样一样的,今年下半年... 别说了,jinsai ...
- 【题解】Luogu P5342 [TJOI2019]甲苯先生的线段树
原题传送门 挺有趣的一道题 \(c=1\),暴力求出点权和n即可 \(c=2\),先像\(c=1\)一样暴力求出点权和n,考虑有多少路径点权和也为n 考虑设x为路径的转折点,\(L\)为\(x\)向左 ...
- [TJOI2019] 甲苯先生的线段树
臭名昭著的巧合:CF750G 题意:在无限深度的一颗线段树中询问编号和为S的简单路径条数. 题解传送门 这道题相当于在原来基础上多了询问两点间简单路径的编号的的问题. 直觉告诉我们只需要求出两点在线段 ...
- [LOJ3109][TJOI2019]甲苯先生的线段树:DP
分析 首先,请允许我 orz HN队长zsy.链接 我们发现树上的链有两种类,一类是直上直下的,一类不是直上直下的(废话).并且,如果我们确定了左侧和右侧的链的长度和整条链上所有节点的编号之和,那么这 ...
- 【LOJ】#3109. 「TJOI2019」甲苯先生的线段树
LOJ#3109. 「TJOI2019」甲苯先生的线段树 发现如果枚举路径两边的长度的话,如果根节点的值是$x$,左边走了$l$,右边走了$r$ 肯定答案会是$(2^{l + 1} + 2^{r + ...
- 洛谷P5338 [TJOI2019]甲苯先生的滚榜
原题链接洛谷P5338 [TJOI2019]甲苯先生的滚榜 题目描述 甲苯先生在制作一个online judge,他发现做比赛的人们很关心自己的排名(显而易见),在acm赛制的比赛中,如果通过题目数量 ...
- 洛谷P5341 [TJOI2019]甲苯先生和大中锋的字符串
原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一 ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
随机推荐
- JDK8 parallelStream性能测试
https://blog.csdn.net/u011870280/article/details/80700993 public static void main(String[] args) {lo ...
- VSCode工具插件推荐
一:VSCode简介 VSCode( Visual Studio Code)是微软出的一款轻量级代码编辑器 ,重要的是它在Windows, OS X 和Linux操作系统的桌面上均可运行.Visual ...
- 关于Python学习的一点说明
关于Python学习的一点说明 我是用什么地方的资料来学习python的呢? 答案当然是鼎鼎大名的GitHub了. 5万多星推荐,100天让你从入门到精通,你值得拥有,点我进入查看
- Linux 修改hostname几种方式
1: hostname DB-Server --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改 2: echo DB-Server > /proc/sys ...
- Form表单组件验证
第一版:最基本版本 views源码 #——————————————————————form验证—————————————— from django import forms from django.f ...
- WannaCry的UWP版,哈哈哈
- Docker镜像恢复与迁移
首先我们先删除掉 mycentos_new:1.1 镜像(注意先停止并删除所有引用了的容器) docker rmi mycentos_new:1.1 然后执行此命令进行恢复 mycentos_new: ...
- powerdesigner数据库设计
(1)创建物理数据模型 打开PowerDesigner,然后点击File-->New Model然后选择如下图所示的物理数据模型(物理数据模型的名字自己起,然后选择自己所使用的数据库即可) ( ...
- php 弱类型比较
1.按数字值比较 1.1数字(整数.浮点数.科学计数法.各种进制数)或纯十进制数字字符串. <?php $a = 100; //整数 $b = "100"; //十进制数字符 ...
- Java中Comparable接口和Comparator接口的简单用法
对象比较器 1.Comparable接口 此接口强行对实现它的每个类的对象进行整体排序,这种排序成为类的自然排序,类的compareTo方法称为类的自然比较方法. 代码示例 import java.u ...