Codeforces 1237E. Balanced Binary Search Trees
这一题是真的坑人,时间空间都在鼓励你用 $NTT$ 优化 $dp$...(但是我并不会 $NTT$)
看到题目然后考虑树形 $dp$ ,设 $f[i][0/1]$ 表示 $i$ 个节点的树,根节点为奇数/偶数的方案数
然后发现对于 $f[i][0/1]$ 的所有方案,把节点编号同时加一个偶数后根节点奇偶性不变,把节点编号加一个奇数后根节点的奇偶性变了
那么就可以对每个 $f[i][0/1]$ 枚举左右子树转移了,因为确定总点数所以左子树点数就有一个范围,在那个范围内枚举子树大小 $j$
那么有转移 $f[i][0]=\sum f[j][1] \cdot f[i-j-1][1]$ ,$f[i][1]=\sum f[j][0] \cdot f[i-j-1][1]$
然后发现转移是卷积的形式,然后据说就可以 $NTT$ 优化什么的...但是我完全不会诶
然后推完发现并没有什么用就去看看神仙的提交记录(比赛的时候是可以看别人的提交结果的)
然后你感到一丝不妙,那些人怎么都是几十毫秒过的???再看看空间发现有些人甚至 $0kb$ ???
于是你赶紧把暴力打完把表打出来,发现大部分状态都是 $0$ ,只有少部分的结果是 $1$
然后你再输出一下方案为 $1$ 的各种状态,发现只有当节点数为 $1,2,4,5,9,10,20,21,41,42,84,85...$
然后就发现了规律,然后你就成功通过了这一题(当然那时我并没有过)
所以现在考虑一下怎么去证明这个东西,首先对于 $3$ 层的这种树只有当点数为 $4,5$ 时可以发现有唯一一种方案
首先显然的,对于这种树的根节点,它的左右儿子子树也必须是这种树
然后注意到对于 $n$ 个节点的这种树,根节点和 $n$ 号节点奇偶性相同(因为二叉搜索树的性质,$n$ 号节点必须是最右边的)
所以根节点的右子树的子树大小必定为偶数
然后又因为左右子树的深度必须一样,所以比 $4,5$ 个节点的这种树 多一层的这种树,它的左右儿子必须是 $4$ 或 $5$ 个节点
又因为之前证明的右儿子必须为偶数,那么多一层的这种树只有左儿子为 $4$ 右儿子为 $4$ ,和左儿子为 $5$ 右儿子为 $4$ 两种方案
那么每一层都只能靠少一层的那两种子树得到新的那两种树,所以证明完毕
#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;
}
const int N=1e6+;
int n;
int main()
{
n=read();
int now=;
while(now<=n)
{
if(now==n || now+==n) { printf("1\n"); return ; }
if(now&) now=(now+)++now;
else now=now++now;
}
printf("0\n");
return ;
}
Codeforces 1237E. Balanced Binary Search Trees的更多相关文章
- Solution -「CF 1237E」Balanced Binary Search Trees
\(\mathcal{Description}\) Link. 定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...
- CF1237E 【Balanced Binary Search Trees】
首先我们要注意到一个性质:由于根与右子树的根奇偶性相同,那么根的奇偶性与\(N\)相同 然后我们发现对于一个完美树,他的左右两个儿子都是完美树 也就是说,一颗完美树是由两棵完美树拼成的 注意到另一个性 ...
- Codeforces 1237E Perfect Balanced Binary Search Tree
题目链接 Observations 含有 $n$ 个点且 key(以下也称 key 为「权值」)是 1 到 $n$ 的 BST 具有下列性质: 若 $k$ 是一个非根叶子且是个左儿子,则 $k$ 的父 ...
- 并不对劲的CF1237D&E:Balanced Playlist and Binary Search Trees
CF1237D Balanced Playlist 题意 有一个长度为\(n\)(\(n\leq 10^5\))的循环播放歌单,每首歌有一个优秀值\(a_i\)(\(a_i\leq 10^9\)). ...
- Method for balancing binary search trees
Method for balancing a binary search tree. A computer implemented method for balancing a binary sear ...
- Optimal binary search trees
问题 该问题的实际应用 Suppose that we are designing a program to translate text from English to French. For ea ...
- [LeetCode] Unique Binary Search Trees 独一无二的二叉搜索树
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- [LeetCode] Unique Binary Search Trees II 独一无二的二叉搜索树之二
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- 2 Unique Binary Search Trees II_Leetcode
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
随机推荐
- LK光流算法公式详解
由于工程需要用到 Lucas-Kanade 光流,在此进行一下简单整理(后续还会陆续整理关于KCF,PCA,SVM,最小二乘.岭回归.核函数.dpm等等): 光流,简单说也就是画面移动过程中,图像上每 ...
- 锁对象Lock-同步问题更完美的处理方式
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...
- 【APUE】第3章 文件I/O (3) 文件共享、原子操作、函数dup/dup2、函数sync/fsync/fdatasync、函数fcntl、函数ioct1、目录/dev/fd 使用说明
1.文件共享 UNIX系统支持在不同的进程间共享打开文件.为了说明这种共享,以下介绍内核用于所有I/O的数据结构. 内核使用3种数据结构表示打开文件,它们之间的关系决定了在文件共享方面一个进程对另一个 ...
- Linux设备驱动程序 之 主次设备号
主设备号和次设备号 对字符设备的访问是通过文件系统内的设备名称进行的,这些名称被称为特殊文件.设备文件.或者简单称之为文件系统树的节点,它们通常位于/dev目录.字符设备驱动程序的设备文件可以通过ls ...
- Configure vyatta
Username: vyatta Password: vyatta 配置网卡: 编辑: configure 内部网络IP地址配置:192.168.0.1 set interfaces ethernet ...
- ycache中redis主备功能设计及使用说明
方案概述: 对于ycache-client,如下图,在一致性hash环上的每个节点都有一个备用的节点.正常情况下slave节点不参与key的分配(冷备).只有当master挂了,ycache clie ...
- 微信小程序入门---记事本增---删
第一.如何获取input框的值(form表单提交除外) bindinput事件 <input type='text' placeholder="请输入内容" placehol ...
- linux 下执行py问题提示cannot import name request
最近因为工作需要,需要在linux上去执行python代码,但是在执行的时候提示cannot import name request,我以为是导入有问题,然后我就把代码放到与包一个目录下,执行py问题 ...
- 视图解析器InternalResourceViewResolver
ModelAndView对象中即可以封装真实视图路径名,也可以封装视图路径的逻辑名,springmvc.xml 代码如下: <!-- 视图解析器(框架) --> <bean clas ...
- kafka入门学习---1 启动kakfa
1.查看kafka生产者产生的数据 kafka-console-consumer.sh --zookeeper hadoop-:,hadoop-:,hadoop-: -topic kafkademo ...