uoj Goodbye Dingyou Round 题解

2.14 晚上的比赛, 现在改好了四题, 还差提答. 在这补个题解

新年的xor

Description

给你 \(n\) , 然后要你构造 \([L, R], L<R\) 使得区间异或和为 \(n\)

Solution

做法多的是

我的方法是特判 \(n\le 4\) 的, 然后对于奇数用 \([n-3,n-1]\) , 偶数用 \([n-4, n]\)

新年的叶子

Description

一棵 \(n\le 5e5\) 的树, 每次会随机将一个原树的叶子染黑, 问白点最远距离什么时候变小

Solution

直径的性质 : 所有直径的中点的距离 \(\le 1\) (反证易证)

我们随便找一条直径的终点为根建树.

当直径长度 \(d\) 为偶数时 :

? 有若干关键子树(即包含关键叶子的子树)

? 这里关键叶子定义为 \(dep=\frac d 2\) 的叶子

? 当只剩一棵关键子树内关键叶子不全黑时, 最长链变小

当直径长度 \(d\) 为奇数时 :

? 所有长度为 \(dep = \lceil\frac d 2\rceil\) 的叶子必定都在同一棵子树, 把这些叶子称为该子树的关键叶子

? 把其他子树中的关键叶子为 \(dep = \lfloor\frac d 2\rfloor\) 的

? 当上面那种关键叶子全黑或下面那种全黑时, 最长链变小.

? 把深度不是最大的哪些子树合并起来, 就可以用直经长度为偶数的方法来处理

做法1 :

枚举哪棵关键子树最后剩下, 设那棵有 \(s\) 个关键叶子, 染色结束时剩余 \(i\) 个关键叶子

设关键叶子总数为 \(n\), 叶子总数为 \(tot\)

在剩余 \(k\) 个关键叶子未黑时, 要想再染多一个关键节点需要期望 \(\frac {tot} k\) 步.

\[\sum_{i=1}^s \frac{\binom s i \binom{n-s}{1}(n-i-1)!}{n^{\underline{n-i}}} \sum_{j=n-i}^n \frac{tot}{j}\]

做法2 :

枚举哪颗关键子树最后剩下, 然后不管那颗子树, 算把剩余子树染黑的期望时间

显然会算多.

注意到对于算多的部分, 必然时所有关键叶子全都被染黑了, 但是最后染黑的不在当前子树

令 \(E(x)\) 为把所有关键叶子全部染黑, 最后染黑的在 \(x\) 子树的期望时间

总共算多的部分是 : (设有 \(L\) 个关键子树)

\[\sum_{x=1}^L\sum_{y\neq x} E(y) = \sum_{y=1}^L E(y) (L-1)\]

新年的五维几何

Description

\(n=5\) 个实数变量, 第 \(i\) 个变量的取值范围为 \([l_i, r_i]\)

给定矩阵 \(a\).

问每个变量都在取值范围内随机时, 有多大概率使得 \(x_i-x_j\ge a_{i, j}\) 全部成立

\(-10\le l_i, r_i, a_{i, j} \le 10\), 且 都是整数

Partial Score

讲一个比较有意义的部分分 : \(若 j\neq i+1, a_{i,j}=-10\)

因为 \(x_i-x_j\) 一定 \(\ge -10\), 所以这个部分分相当于我们只需要考虑相邻变量的限制

设 \(f_i(x)\) 为 \(x_i \le x\), 且 \(x_i,\cdots,x_n\) 满足限制的概率 (\(f_{n+1}(x) = 1\))

我们有

\[
f_i(x) = \left\{\begin{aligned}
&0&&x\lt l_i\\&\frac{1}{r_i-l_i}\int_{l_i}^x f_{i+1}(y-a_{i,j}) dy && l_i\le x\le r_i\&f_i(r_i) && x\gt r_i\\end{aligned}\right.
\]

注意到 \(f_i(x)\) 是 \(O(n)\) 段的多项式, 我们可以每段积分, 然后平移

对于定积分的处理方法 : 因为 \(l_i\) 是常数, 我们算出不定积分, 然后整体减去一个常数即可

最后截出 \([l, r]\), 补上旁边两段即可

(没有实现, 有错指出)

Solution

注意到特殊性质 : 取值范围, 限制 都是整数.

\(l_i=r_i\) 的变量不讨论 (特判一些东西就好了)

考虑对于 \(l_i\lt r_i\) 的变量, 我们设 \(x_i = p_i+q_i\), \(p_i\in[l_i, r_i)\in Z, q_i\in[0, 1)\in R\)

那么我们 \(O(10^n)\) 枚举 \(p\), 算出对应概率, 取平均值即为答案所求

考虑限制 \(p_i+q_i-p_j-q_j\ge a_{i,j}\)

移项有 \(q_i-q_j\ge p_j-p_i+a_{i,j}\) , 可知右边 \(\ge 1\) 时无解, \(\le -1\) 时限制无效

右边为 \(0\) 时相当于 \(q_j\le q_i\) 的变量. 在随机撒点的情况下可视为 \(q_j\lt q_i\)

由于随机撒点时 \(n!\) 种相对大小顺序的概率是相同的, 我们可以转为统计有多少种相对大小顺序满足条件. 状压或暴搜即可

总复杂度 \(O(10^n2^nn)\)

新年的代码

Description

给你长度 \(5e5\) 的 \(RGB\) 串 \(S, T\), 问从 \(S\) 至少操作多少次才能到 \(T\)

操作(1) : 选择两个不同颜色的相邻位, 将它们都变成除了它们的第三种颜色 (RG -> BB)

操作(2) : 选择两个相同颜色的相邻位, 将它们变成不同的新颜色 (BB -> RG / GR)

Solution

给 \(R, G, B\) 随便进行一个 \(012\) 标号 (标号后 \(S\to a, T\to b\))

然后发现每次操作相当于在 \(\bmod 3\) 意义下把相邻位一个 +1, 另一个 -1

反之, 把相邻位+-1不一定是一个操作

考虑在\(\mod 3\) 意义下求个前缀和 \(sa, sb\)

原操作等价于对前缀和序列的单点 \(\pm 1\), 原目标等价于经过一波操作让两个前缀和序列相等

考虑按照 \(sa\equiv sb\pmod 3\) 的位置分段. (每段包含最右边 \(sa=sb\) 的那个位置)

那么显然对于一个长度 \(n\) 的段, 至少要操作 \(n-1\) 次.

然后根据后面的构造, 操作至多 \(n\) 次, 因此每段需要操作 \([n-1, n]\) 次

目前为止只考虑了段与段独立的情况. 考虑归纳 :

归纳基础 : 若某一次在段交界处操作了一下使两段合并, 之后不再合并段, 那么设合并了长度为 \(a, b\) 的段, 原来要 \([a+b-2, a+b]\) 次, 合并的话要 \(1 + [a+b-1, a+b]\) 次. 不优

归纳 : 每次合并段后进入归纳子状态, 不优.

然后我们按照下面的构造中用到的操作方法, 进行 \(dp\)

\(dp[i][u][v]\) 表示第 \(i+1\) 这个位置要从 \(u\) 变 \(v\) , 前 \(i\) 个位置需要代价是什么

然后有两种可能的操作 : (操作从上到下依次执行, 每次操作把上一行变成下一行)

case 1:
      a[i+1]
    u   w
    v b[i+1]
case 2:
    u a[i+1]
    v   w
      b[i+1] 

构造

若 \(a\) 中段头为相同颜色, 不妨设为 \(00\)

那么若 \(b\) 中段头为 \(1/2\), 一步操作把段头改对, 递归. 否则, 不用改段头, 直接递归进入

若 \(a\) 中段头为不同颜色, 不妨设为 \(01\)

若 \(b\) 中段头为 \(2\) , 一步操作递归. 若为 \(0\), 直接递归

若为 \(10\) , 则 \(01\to 22\to 10\) 两步完成两个位置, 递归两层

若为 \(11\) , 先递归操作后面, 把 \(a\) 中第二个位置变成 \(2\), 再 \(02\to 11\)

若为 \(12\) , 同理先操作后面, 把 \(a\) 中第二个位置变成 \(0\), 再 \(00\to 12\)

构造完成.

问题来了 : 会不会一直借位到段位还要往后借呢?

从前缀和的角度, 借位相当于先fix后面, 再fix自己. 然后段尾不需要fix自己.

(我记得我之前不是这样证的. 现在写题解时不知道我当时怎么证的了. 不知道这样理解有没有错, 有错请指出)

新年的投票

还不会啊... 挖个坑

原文地址:https://www.cnblogs.com/acha/p/8506486.html

时间: 2024-08-29 20:47:13

uoj Goodbye Dingyou Round 题解的相关文章

UOJ Goodbye Bingshen

在叶子童鞋的推荐下打了这场比赛... 感觉被虐爆了... 怎么这么多构造题... 我还没写过呢... 交互题是毛线...看了好久没看懂...就放弃了...(我语文好差QAQ...) 最后只会T1...T2没时间了,就随便水了一发...居然拿了30分(rp--)... 下面有一些是自己/小伙伴YY的想法...有一些是题解...先放官方题解... 就不放题面了...复制过来效果很神奇... A. 长度测量鸡 分析: 这个你脑补一下,划分成的长度一定是1~n的某个全排列,然后算一算,发现能够组合出来的

【UOJ #6】AB题解

#74 破解密码 首先容易得出第i位编号为x的字母的公式: (26^n -1)*x=26*h[i]-h[i+1] 我们可以先求出(26^n -1)%mod的逆元,乘到右边去即可. 可是,这样做只有50分! (26^n -1)%mod=0的时候没有逆元!!也就是说这种情况下x为任何数都可以,而这种算法会导致全部输出a,h[]全部都是0了,可能与读入的h不符. 因此这种情况的做法是:求出h[1]用26进制表示的n位数,直接输出就是答案了.因为他满足h[1],后面的必然满足. <span style=

【UOJ Goodbye Jiawu】

A.新年的巧克力棒 这道题我的做法是:如果有2^k个巧克力那么很好算,所以把给定的数字二进制拆分: 2得到1,4得到3,8得到7...每一个都是前一位的2倍+1 #include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> #include <cstring> using namespace std; int main() { int T; scanf(&quo

Clash Credenz 2014 Wild Card Round题解

A题 简单模拟. 1 /************************************************************************* 2 > File Name: A.cpp 3 > Author: Stomach_ache 4 > Mail: [email protected] 5 > Created Time: 2014年09月01日 星期一 08时08分12秒 6 > Propose: 7 *********************

COCI 2015、2016 1st round 题解(官方)

官方代码: code-KARTE: #include <cstdio> #include <iostream> #include <cstring> using namespace std; const int MAXB = 5; const int MAXN = 20; bool bio[MAXB][MAXN]; int getColor(char chr) { if (chr == 'P') return 0; if (chr == 'K') return 1; i

春节比赛合集

---恢复内容开始--- 春节这几天打了很多场比赛,下面做一个总结和部分题解(没写的不会做) Codeforces Round #462 (Div. 1) 这是我打的第一场div1,div1和div2有很大的区别.这一次一开始打就卡在了A题,半个多小时才做出来.. A. A Twisty Movement 题意:给你一个由1和2组成的序列,你可以翻转其中一段,求翻转后的最长不下降子序列. 数据范围:\(1 \leqslant n \leqslant 2000\) 看到这道题之后,可以转换为求枚举

uoj#67. 新年的毒瘤(割顶)

#67. 新年的毒瘤 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用n个结点m 条无向边的无向图表示.这个图中有一些结点被称作是毒瘤结点,即删掉这个结点和与之相邻的边之后,这个图会变为一棵树.树也即无简单环的无向连通图. 现在给你这个无向图,喜羊羊请你帮他求出所有毒瘤结点. 样例一 input 6 6 1 2 1 3 2 4 2 5 4 6 5 6 output 3 4 5 6 256MB 来源 UOJ Goodbye Jiawu [思路] 无向

【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁先挤奶的顺序.她们甚至也不能通过仍硬币的方式. 所以她们通过"round number"竞赛的方式.第一头牛选取一个整数,小于20亿.第二头牛也这样选取一个整数.如果这两个数都是 "round numbers",那么第一头牛获胜,否则第二头牛获胜. 如果一个正整数N的二

●UOJ 131 [NOI2015] 品酒大会

题链: http://uoj.ac/problem/131 题解: 网上大多数的方法都是用并查集维护.这里呢,给出另一种自己YY的解法(但实际上本质差不多吧): 后缀数组,RMQ,单调栈 1).预处理 1].首先对字符串后缀排序,得到 sa[i],rank[i],height[i]    2].然后维护出 L[i]:表示在后缀数组中,排名最小(记其排名为 L[i])的后缀与排名为 i的后缀的LCP>=hei[i]    同理 R[i]:表示在后缀数组中,排名最大(记其排名为 R[i])的后缀与排