CF # 1477 简要题解

2024-01-30 00:48
文章标签 题解 cf 简要 1477

本文主要是介绍CF # 1477 简要题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A

  • g c d gcd gcd 即可

B

  • 把操作倒过来,容易用线段树维护

C

  • 增量构造,每次容易调整为合法解

D

m m m 对关系,要求两个排列 p u , p v p_{u},p_v pu,pv q u , q v q_u,q_v qu,qv 的大小关系一样
最大化 p , q p,q p,q 中位置不同的个数

  • 考虑这个图的补图,去除一个联通块
    若大小为 1 1 1,那么铁定相等了
    否则连了边的点之间大小关系是无所谓的
    考虑一个菊花图,设根为 u u u,其余点为 v 1 … v k v_1\dots v_k v1vk
    只需要 p u = 1 , q u = k + 1 p_u=1,q_u=k+1 pu=1,qu=k+1
    p v i = i + 1 , q v i = i p_{v_i}=i+1,q_{v_i}=i pvi=i+1,qvi=i,这样就实现了错位,且与其它点的大小关系是对的
    考虑整一棵 d f s dfs dfs 树出来,我们只需要将其划分成若干菊花依次构造就可以了

E

有两个长为 n , m n,m n,m 的数组 a i , b i a_i,b_i ai,bi,要将其排成一个长为 n + m n+m n+m 的数组
给定一个初始值 w w w,每一次将 w w w 变成 max ⁡ ( 0 , w + c i − c i − 1 ) \max(0,w+c_i-c_{i-1}) max(0,w+cici1) c 0 = c 1 c_0=c_1 c0=c1
若干 c i c_i ci 原本是 a a a 中的,则将 a a a 的分数加 w w w,否则 b b b 加 ,求 a − b a-b ab 分数的最大值

  • 每个点的贡献就是 max ⁡ ( c i − c 1 + k , c i − min ⁡ j ∈ [ 1 , i ] c j ) \max(c_i-c_1+k,c_i-\min_{j\in [1,i]}c_j) max(cic1+k,ciminj[1,i]cj)
    我们将这个写成 k + c i − c 1 + max ⁡ ( 0 , c 1 − k − min ⁡ j ∈ [ 1 , i ] c j ) k+c_i-c_1+\max(0,c_1-k-\min_{j\in [1,i]}c_j) k+cic1+max(0,c1kminj[1,i]cj)
    考虑贪心,枚举一个 a p a_p ap(或 b p b_p bp) 作为第一个,那么一定是 b m , … b 1 b_m,\dots b_1 bm,b1,然后是 a 1 , … a n a_1,\dots a_n a1,an
    我们将贡献写出来:设 t = a p t=a_p t=ap
    ( n − m ) k + ( m − n ) t − ∑ i = 1 m max ⁡ ( 0 , t − k − b i ) + ( n − 1 ) max ⁡ ( 0 , t − k − min ⁡ ( a i , b i ) ) + ∑ a i − ∑ b i (n-m)k+(m-n)t-\sum_{i=1}^m\max(0,t-k-b_i)\\+(n-1)\max(0,t-k-\min (a_i,b_i))+\sum a_i-\sum b_i (nm)k+(mn)ti=1mmax(0,tkbi)+(n1)max(0,tkmin(ai,bi))+aibi
    ( n − m ) k + ( m − n ) t − ∑ i = 1 m max ⁡ ( 0 , t − k − b i ) + n max ⁡ ( 0 , t − k − min ⁡ ( a i , b i ) ) + ∑ a i − ∑ b i (n-m)k+(m-n)t-\sum_{i=1}^m\max(0,t-k-b_i)\\+n\max(0,t-k-\min (a_i,b_i))+\sum a_i-\sum b_i (nm)k+(mn)ti=1mmax(0,tkbi)+nmax(0,tkmin(ai,bi))+aibi
    注意到这是个关于 t t t 的分段一次函数,我们把所有可能的分段点找出来,用树状数组求和即可

F

n n n 个巧克力棍,每个长为 L i L_i Li,每次每根木棍有 L i ∑ L \frac{L_i}{\sum L} LLi 的概率被选中
然后它会被分为两个长为 x , L i − x x,L_i-x x,Lix 的巧克力棍,其中 x x x 是在 [ 0 , L i ] [0,L_i] [0,Li] 随机的实数
max ⁡ L ≤ K \max L\le K maxLK 的期望

  • 我们先从简单的问题入手,分析 n = 1 n=1 n=1 的情况
    我们不看成将其分成两根,那么问题可以看成随机在 [ 0 , L ] [0,L] [0,L] 切若干刀
    注意到我们只需要统计切若干刀任然 max ⁡ L > K \max L>K maxL>K 的概率,就可以知道答案
    下面我们来统计切了 t t t 刀结束了的概率 p t p_t pt,那么 ∑ 1 − p t \sum 1-p_t 1pt 就是答案
    我们设 w = K L w=\frac{K}{L} w=LK,然后将 L L L 看成 1 1 1
    那么就是有 t + 1 t+1 t+1 [ 0 , 1 ] [0,1] [0,1] 的随机变量 x i x_i xi 满足 max ⁡ ( x i ) ≤ w \max(x_i)\le w max(xi)w ∑ x i = 1 \sum x_i=1 xi=1
    看成 t t t 个随机变量, max ⁡ ( x i ) ≤ 1 , 1 w − 1 ≤ ∑ x i ≤ 1 w \max(x_i)\le 1,\frac 1w-1\le \sum x_i\le \frac 1w max(xi)1,w11xiw1
    我们设 ≤ y \le y y 的概率为 f ( y ) f(y) f(y),那么求的就是 t ! w t ( f ( 1 w ) − f ( 1 w − 1 ) ) t!w^t\Big(f(\frac 1w)-f(\frac 1w-1)\Big) t!wt(f(w1)f(w11))
    对于 f ( y ) f(y) f(y),我们枚举上界容斥,得到:
    f ( y ) = ∑ i = 0 ⌊ y ⌋ ( − 1 ) i ( t i ) ( y − i ) t t ! f(y)=\sum_{i=0}^{\lfloor y\rfloor}(-1)^i\binom ti\frac{(y-i)^t}{t!} f(y)=i=0y(1)i(it)t!(yi)t
    所以说算的就是:
    1 − p t = 1 − ( ∑ i = 0 l ( − 1 ) i ( t i ) ( 1 − w i ) t − ∑ i = 0 l − 1 ( − 1 ) i ( t i ) ( 1 − ( i + 1 ) w ) t ) = ∑ i = 1 l ( − 1 ) i − 1 ( ( t i ) + ( t i − 1 ) ) ( 1 − w i ) t = ∑ i = 1 l ( − 1 ) i − 1 ( t + 1 i ) ( 1 − w i ) t 1-p_t=1-\Big(\sum_{i=0}^l(-1)^i\binom ti(1-wi)^t-\sum_{i=0}^{l-1}(-1)^i\binom ti (1-(i+1)w)^t\Big)\\=\sum_{i=1}^l(-1)^{i-1}(\binom{t}{i}+\binom{t}{i-1})(1-wi)^t=\sum_{i=1}^{l}(-1)^{i-1}\binom{t+1}{i}(1-wi)^t 1pt=1(i=0l(1)i(it)(1wi)ti=0l1(1)i(it)(1(i+1)w)t)=i=1l(1)i1((it)+(i1t))(1wi)t=i=1l(1)i1(it+1)(1wi)t
    现在我们要对 t t t 求和,即需要计算: ∑ t ( t i ) x t = x i ( 1 1 − x ) i + 1 \sum_t \binom{t}{i}x^t=x^i(\frac{1}{1-x})^{i+1} t(it)xt=xi(1x1)i+1
  • 解决多个的问题:
    我们设 q i , j q_{i,j} qi,j 表示第 i i i 根,切 j j j 刀,还活着的(存在一段 > K >K >K 的概率)
    其中 q i , j = ∑ k = 1 ⌊ L i K ⌋ ( − 1 ) k − 1 ( m + 1 k ) ( 1 − K L i k ) j q_{i,j}=\sum_{k=1}^{\lfloor \frac{L_i}{K}\rfloor}(-1)^{k-1}\binom{m+1}{k}(1-\frac{K}{L_i}k)^j qi,j=k=1KLi(1)k1(km+1)(1LiKk)j
    设其 E G F EGF EGF Q i ( x ) Q_i(x) Qi(x),设 p i p_i pi 为总共切 i i i 下还活着的概率, P ( x ) P(x) P(x) 为其 E G F EGF EGF
    然后将 Q i ( x ) Q_i(x) Qi(x) x j x^j xj 乘上 ( L i ∑ L ) j (\frac{L_i}{\sum L})^j (LLi)j
    P ( x ) = e x − ∏ i ( e L i ∑ L x − Q i ( x ) ) P(x)=e^x-\prod_i(e^{\frac{L_i}{\sum L}x}-Q_i(x)) P(x)=exi(eLLixQi(x))
    若要求出答案,我们需要将 P ( x ) P(x) P(x) 换成其 O G F OGF OGF p ( x ) p(x) p(x),那么答案就是 p ( 1 ) p(1) p(1)
    为了得到 p ( x ) p(x) p(x),我们还需要对 P ( x ) P(x) P(x) 进行化简
    exp ⁡ ( L i L x ) − ∑ t x t t ! ∑ k = 1 ⌊ L i K ⌋ ( − 1 ) k − 1 ( t + 1 k ) ( 1 − K L i k ) t ( L j L ) t = exp ⁡ ( L i L x ) − ∑ k = 1 ⌊ L i K ⌋ ( − 1 ) k − 1 ( t + 1 k ) ( L i − k K L ) t x t t ! = exp ⁡ ( L i L x ) − ∑ k = 1 ⌊ L i K ⌋ ( − 1 ) k − 1 t + 1 ( t + 1 − k ) ! k ! ( L i − k K L x ) t \exp(\frac{L_i}{L}x)-\sum_t \frac{x^t}{t!}\sum_{k=1}^{\lfloor\frac{L_i}{K}\rfloor}(-1)^{k-1}\binom{t+1}{k}(1-\frac{K}{L_i}k)^t(\frac{L_j}{L})^t\\=\exp(\frac{L_i}{L}x)-\sum_{k=1}^{\lfloor\frac{L_i}{K}\rfloor}(-1)^{k-1}\binom{t+1}{k}(\frac{L_i-kK}{L})^t\frac{x^t}{t!}\\=\exp(\frac{L_i}{L}x)-\sum_{k=1}^{\lfloor\frac{L_i}{K}\rfloor}(-1)^{k-1}\frac{t+1}{(t+1-k)!k!}(\frac{L_i-kK}{L}x)^t exp(LLix)tt!xtk=1KLi(1)k1(kt+1)(1LiKk)t(LLj)t=exp(LLix)k=1KLi(1)k1(kt+1)(LLikK)tt!xt=exp(LLix)k=1KLi(1)k1(t+1k)!k!t+1(LLikKx)t
    y = L i − k K L x y=\frac{L_i-kK}{L}x y=LLikKx,那么就是
    exp ⁡ ( L i L x ) − ∑ k = 1 ⌊ L i K ⌋ ( − 1 ) k − 1 1 k ! y k e y − ∑ k ( − 1 ) k − 1 1 ( k − 1 ) ! y k − 1 e y \exp(\frac{L_i}{L}x)-\sum_{k=1}^{\lfloor\frac{L_i}{K}\rfloor}(-1)^{k-1}\frac{1}{k!}y^ke^y-\sum_{k}(-1)^{k-1}\frac{1}{(k-1)!}y^{k-1}e^y exp(LLix)k=1KLi(1)k1k!1ykeyk(1)k1(k1)!1yk1ey
    我们将 e L i L x e^{\frac{L_i}{L}x} eLLix 提出来,那么后面都是 e − k K L x e^{\frac{-kK}{L}x} eLkKx,系数只有 L k \frac{L}{k} kL
    我们暴力维护系数,复杂度为 O ( n ( L k ) 4 ) \mathcal{O}(n(\frac{L}{k})^4) O(n(kL)4)
    注意到 x k x^k xk e − k K L x e^{-\frac{kK}{L}x} eLkKx 只会有 n n n 的差,所以可以变成 O ( n 2 ( L k ) 2 ) \mathcal{O}(n^2(\frac{L}{k})^2) O(n2(kL)2)
    n t t ntt ntt 可以优化到 O ( n 2 L log ⁡ L ) \mathcal{O}(n^2L\log L) O(n2LlogL)
    考虑求出 x k e C x x^ke^{Cx} xkeCx 的贡献: ∑ i ≥ 0 ( i + k ) ! C i i ! = k ! ∑ i ≥ 0 ( i + k k ) C i + k = k ! ( 1 1 − C ) k + 1 \sum_{i\ge 0}(i+k)!\frac{C^{i}}{i!}=k!\sum_{i\ge 0}\binom{i+k}{k}C^{i+k}=k!(\frac{1}{1-C})^{k+1} i0(i+k)!i!Ci=k!i0(ki+k)Ci+k=k!(1C1)k+1

这篇关于CF # 1477 简要题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658630

相关文章

cf 164 C 费用流

给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务 最后问你当获利最大时,应该安排那些机器工作,即输出方案 具体建图方法: 新建源汇S T‘ 对任务按照起始时间s按升序排序 拆点: u 向 u'连一条边 容量为 1 费用为 -c,

CF 508C

点击打开链接 import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String [] args){new Solve().run() ;} }class Solve{int bit[] = new int[608] ;int l

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

P2858 [USACO06FEB] Treats for the Cows G/S 题解

P2858 题意 给一个数组。每天把最左或者最右的东西卖掉,第 i i i个东西,第 d a y day day天卖出的价格是 a [ i ] ∗ d a y a[i]*day a[i]∗day。 记忆化搜索 void dfs(int l,int r,int day,ll sum){if(v[l][r]>=sum)return;v[l][r]=sum;if(l>r)//这就是dp答案{

【CF】C. Glass Carving(二分 + 树状数组 + 优先队列 + 数组计数)

这题简直蛋疼死。。。。。 A了一下午 #include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn = 200005;int h,w,n;int C1[maxn],C2[maxn];int