冲刺CSP联训模拟2
A. 挤压
考虑把一个数写成二进制,不妨记为 $ \sum s_i \times 2^i,s=0或1 $ ,设其概率为 $ p_k $ ,则期望值:
\[p_k \times (\sum_{ i=0 }^{ 29 } s_i)^2 = p_k \times \sum_{i=0}^{29} \sum _{j=0}^{29} s^i \times s^j \times 2^{i+j} \]设 $ dp[i][j] $ 为异或后i,j位均为1的概率,方程不难推。
避坑:不要尝试计算每一位异或后是1的概率,因为某些位数会有冲突的概率。
B. 工地难题
发现对于每个 $ k $ ,都需要单独考虑,这样复杂度已经达到 $ O(n) $ ,这个时候跑DP似乎只能度过相对失败的一生。以下我们来推数学式子。
一个简单的想法是,先计算最长连续段不超过 $ k $ ,再差分。但是这样还是不好做,发现如果没有 $ k $ 的限制,有 $ n-m $ 个0把 $ m $ 个1分开,相当于 $ \sum _{i=1}^{n-m+1} x_i = m (x_i \ge 0) $ 方案数为 $ \binom{n}{n-m} $ ,减去最长段超过 $ k $ 的就是答案。假设有一个段超过 $ k $ ,那么长度至少 $ k+1 $ ,其他1还是可以随意分布,这个最长段的位置有 $ n-m+1 $ 个,方案数为 $ (n-m+1) \times \binom{n-(k+1)}{n-m} $ 。
由于这有重复的情况在内,即至少有一个段超过 $ k $ 包含至少有两个段超过 $ k $ ,容斥即可。注意到如果有超过 $ \left \lfloor \frac{m}{k+1} \right \rfloor $ 个段超过 $ k $ ,方案数一定为0。因此复杂度是调和级数的, $ O(n\log n) $ 。
C. 星空遗迹
$ O(NQ) $ 的做法比较好想,就是用一个栈把无意义的元素弹掉。
定义
\[f(n) = \begin{cases} f(n-1)+1 , & if (s[n]<s[n-1]) \\ f(n-1) , & if (s[n]=s[n-1]) \\ f(n-1)-1, & if (s[n]>s[n-1]) \end{cases} \]发现一段字符串的答案为 $ s[n] $ ,当且仅当 $ f(n) $ 是这一段最后一个非正数。线段树维护前缀和最大值,区间修改,区间查询。
想法
这一场唐完了,T1每一位分开考虑,甚至用一个折半搜索,调试,手模,暴力都不能过样例,2.5h之后发现问题(上文说过了),然后开始思考人生。写了T1指数级暴力,还有1h开T2,因为想DP度过相对失败的一生,复杂度假了2次,果断改指数级暴力,于是前两题喜提 $ 40pts $ ,T3 $ O(n^2) $ 暴力显然,获得 $ 60pts $ ,T4看起来是难题,也没想暴力,回到T1思考人生(除了T3都失败了)。
标签:暴力,sum,29,冲刺,times,联训,CSP From: https://www.cnblogs.com/abnormal123/p/18448809