Solution -「THUPC 2019」Duckchess】的更多相关文章

[题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现,这道理可以用打马后炮别的方式来理解. 先放松一点条件,假如位运算只有一种,定位某一颗生成树,那么可以知道 \[ w(T)=\oplus_{w\in W} w \] 写成生成函数的形式,对于每条边就是 \[ h((i,j))=[\exist e=(i,j,w)]x^w \] 现在重边可以看做一条边了…
\(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \(p_{i,k}\).依照此规则确定权值后,你不停抽卡,每次抽到第 \(i\) 张卡牌的概率正比于 \(w_i\),直到所有卡都被抽过至少一次.   此后,记 \(t_i\) 表示第 \(i\) 张牌第一次被抽到的时间.给定 \(n-1\) 条形如 \(\lang u,v\rang\) 的限制,表示…
\(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\times10^6\). \(\mathscr{Solution}\)   注意到一个显然的事实,对于某个前缀 \(S[:i]\) 以及两个起始下标 \(p,q\),若已有 \(S[p:i]<S[q:i]\),那么在所有的 \(j>i\) 中,都有 \(S[p:j]<S[q:j]\).换言之,最终…
\(\mathcal{Description}\)   Link.   在一个 \(n\times m\) 的网格图中,每个格子上是空白 . 或沙子 #,四联通的沙子会连成一个整体.令此时所有沙子块同时开始匀速下落,下落时不同的沙子块不会再连成整体,求最终状态.   \(nm\le10^6\). \(\mathcal{Solution}\)   虽然切了但考点掌握得并不熟练.   考虑一列上的两堆沙子,上方一堆所在的块必然会被下方一堆所在的块托住,若从模拟入手,就是"先让后者下落,再让前者下落&…
\(\mathcal{Description}\)   Link.   有 \(n\) 个开关,初始时所有开关的状态为 \(0\).给定开关的目标状态 \(s_1,s_2,\cdots,s_n\).每次操作中会以正比于 \(p_i\) 的概率拨动开关 \(i\).求开关达到目标状态的期望操作次数,对 \(998244353\) 取模.   \(n\le100\),\(\sum p\le5\times10^4\). \(\mathcal{Solution}\)   不妨令 \(p_i\) 为一次操…
\(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个结点的树,双向边权不相同.\(q\) 次询问,每次询问在树上标记 \(e\) 个点,标记的价值为所有趋向于某个标记点的有向边权值之和,求价值的最大值.   \(q\le n\le2\times10^5\). \(\mathcal{Solution}\)   \(e=1\text{ or }2\) 的时候可以直接换根求解.需要强调的是,当确定一个被标记的根时,其余标记点的贡献为根到这个标记点的有向路径…
\(\mathcal{Description}\)   Link.   原题意足够简洁啦.( \(\mathcal{Solution}\)   乍一看比较棘手,但可以从座位的安排方式入手,有结论:   一个班的学生按身高排序后,相邻的两两坐在一桌.   证明略,比较显.   第二个结论:   设按上述方案分桌,从左至右将每桌编号为 \(1\sim n\).则每个班级的第 \(i\) 号桌都坐在同一个位子.   考虑交换两桌不能使答案变优即证.   考试的时候结论都看出来了结果写假了你敢信 qwq…
\(\mathcal{Description}\)   Link.   不想概括题意.jpg \(\mathcal{Solution}\)   定义点集 \(S_c=\{(u,v)|v=c\}\):第 \(k\) 层点表示所有满足 \(u=k\) 的结点 \((u,v)\).   尝试朴素 DP,令 \(f(i,j)\) 表示兔子从 \((0,x)\) 出发跳 \(i\) 步到达某个 \((u,v)\in S_j\) 的方案数(到达结点不同算不同方案):\(g(i,j)\) 表示兔子从 \((0…
点此看题面 大致题意: 给你两个长度为\(n\)的数组\(a_i\)和\(b_i\),定义\(f_k(x)=\sum_{i=1}^k|a_ix+b_i|\),对于\(k=1\sim n\)的每个\(f_k\),求\(f_k\)的最小值. 前言 懒得写平衡树,于是就想了个线段树做法. 还有,题目没有特殊说明不存在\(a_i=0\)的情况,但数据中确实不存在这样的情况,我的做法遇上这种情况可能要加一些特殊处理,然而我懒得写了. 前置知识 先考虑一个简单的问题: \(Problem\ 1\): 给你一…
https://loj.ac/problem/6620 高中数学好题.. |kx+b|的函数图像很直观,直接考虑函数图像: 一定只有一段极小值点! 这个点就是最小值了 特点:斜率为0! 而且发现,如果每个|kx+b|的零点作为一个端点的话,那么最小值一定可以在一个端点取到! (因为两个端点之间是一次函数,最值一定是二者之一) 这个最小值点斜率是负的,下一个就是正的 所以线段树维护斜率和.截距和 加入|kx+b|,分成两段,第一段整体+k,+b第二段同理 二分找到最后一个斜率是负数的点 其实,x的…