「考试总结」ZROI-21-CSP7连-DAY1 总结
估计是温水煮青蛙,本场比赛比较水。
#T1
#Problem
一种递归定义的数列(字符串列?):第一项为 1
,后面的每一项形式为上一项自左往右 相邻的相同数字个数+该数字
,比如第二项为 11
,表示 1
个 1
,问第 \(n(n\leq 25)\) 项。
#Solution
就是简单模拟,没有难度。
#Code
1 |
|
#T2
#Problem
一个严格递增的序列 \(a_i\),支持两种操作:
- 区间修改
- 查询是否有位置满足 \(a_i=i\)
#Solution
我们来考虑所有满足 \(a_i=i\) 的位置中 \(i\) 最大的,不难发现如果存在这样的位置,那么其一定具有二分性,即设该位置为 \(i\),那么对于所有的 \(j<i\),有 \(a_j\leq j\),对于 \(j>i\),则有 \(a_j > i\),于是我们可以依靠此性质进行二分,注意我们需要判断二分结束后的位置是否满足条件(赛时脑抽忘判了 \(100pts\to 10pts\) QwQ),如果不满足,那么意味着不存在这样的位置,同时需要注意边界。
关于区间修改,我们可以直接采用线段树维护,由于线段树本身便是天然的二分结构,所以二分的过程可以直接在线段树上进行。总体时间复杂度为 \(O(k\log n).\)
#Code
1 |
|
#T3
#Problem
给定序列 \(a_i\),\(q\) 个询问,每次询问位于 \(a_l\) 到 \(a_r\) 这个子序列中出现次数为奇数的数的个数。
#Solution
莫队的板子题,不多讲。
#Code
1 |
|
#T4
本题是 TJOI 的一道原题 [题目链接]
#Problem
求 \(n\) 个点的二叉树的叶结点期望个数,对 \(2148473647\) 取模。
用 \(2148473647\) 做模数就恶心人,最开始以为是 \(2147483647(2^{31}-1)\),发现这样没有逆元...
#Solution
设 \(f_n\) 表示 \(n\) 个节点的不同二叉树的个数,\(g_n\) 表示 \(n\) 个节点的 \(f_n\) 个二叉树的叶结点总数。答案显然应当是
\[ \dfrac{g_n}{f_n} \]
\(f_n\) 显而易见是 Catalan 数,那么来考虑 \(g_n\) 怎么求,通过打表可以得到如下性质
\[ g_n=nf_{n-1} \]
我们这样考虑证明:
- 对于每棵 \(n\) 个点 \(k\) 个叶结点的二叉树,如果我们把这 \(k\) 个叶结点分别去掉,可以得到 \(k\) 棵不同的 \(n-1\) 个节点的二叉树;
- 对于每棵 \(n-1\) 个点的二叉树,我们知道有 \(n\) 个位置可以挂上一个叶结点,所以通过上面的变换,每一棵 \(n-1\) 个点的二叉树可以被得到 \(n\) 次;
于是综合上面两点不难得到 \(g_n=nf_{n-1}\) 的结论,于是有
\[ \dfrac{g_n}{f_n}=\dfrac{nf_{n-1}}{f_n} \]
其中有 \(f_n=\dfrac{\binom{2n}{n}}{n+1}\),带入化简后可以得到
\[ \dfrac{g_n}{f_n}=\dfrac{nf_{n-1}}{f_n}=\dfrac{n(n+1)}{2(2n-1)}. \]
#Code
1 |
|
期望得分:\(100+100+100+100=400\) 实际得分:\(100+10+100+100=310\) 血亏QwQ