首页 > 其他分享 >CF1925D Good Trip 题解

CF1925D Good Trip 题解

时间:2024-03-05 19:37:09浏览次数:27  
标签:Good frac 远足 int 题解 times 友谊 CF1925D Mod

Solution

不好做的地方在于每一对朋友的友谊值是不同的,于是考虑将其统一为一个数。比较好想的就是将他们的初始友谊值提前计算,即对于每一次远足,设总情况为 \(S=\frac{n \times (n-1)}{2}\),总的初始友谊值为 \(w=\sum_{i=1}^{m} f_i\),假设友谊值不变,获得的期望友谊值为 \(\frac{w}{S}\),共有 \(k\) 次远足,所以初始友谊值的贡献即为 \(\frac{k \times w}{S}\)。

现在我们可以认为每一对朋友的友谊值为 \(0\),带来的好处是每一对朋友的期望增加量可以认为是相同的。于是考虑其中一对朋友被选中了 \(t\) 次,那么这对朋友的增加量为 \(h=\frac{t*(t-1)}{2} \times P(t)\),\(P(t)\) 是被选中 \(t\) 次的概率。设 \(p1\) 为这 \(t\) 次远足在 \(k\) 次远足中出现的情况数,即 \(p1=\binom{k}{i}\);设 \(p2\) 为这对朋友被选中 \(t\) 次的期望,所以 \(p2=(\frac{1}{S})^t\);设 \(p3\) 为这对朋友在剩余的 \(k-t\) 次远足中不再被选中的期望,所以 \(p3=(\frac{S-1}{S})^{k-t}\)。那么 \(P(t)=p1\times p2 \times p3\)。知道了其中一对朋友出现 \(0 \sim k\) 次的期望后,乘上 \(m\) 即为总的期望增加量。

void work(){ 
    cin>>n>>m>>k; int ans=0,res=0; 
    for(int i=1,a,b,p;i<=m;i++) cin>>a>>b>>p,ans=(ans+p)%Mod; 
    int S=n*(n-1)/2%Mod,invS=qmi(S,Mod-2); ans=k*ans%Mod*invS%Mod; 
    for(int i=1;i<=k;i++){ 
        int w=i*(i-1)/2%Mod; 
        res=(res+w*C(k,i)%Mod*qmi(invS,i)%Mod*qmi((S-1)*invS%Mod,k-i)%Mod)%Mod; 
    } ans=(ans+res*m%Mod)%Mod; printf("%lld\n",ans); 
} 

标签:Good,frac,远足,int,题解,times,友谊,CF1925D,Mod
From: https://www.cnblogs.com/Celestial-cyan/p/18054718

相关文章

  • ABC259Ex 题解
    Solution首先考虑暴力:枚举同种颜色的格子,假设两点为\((i,j),(x,y)\),那么从\((i,j)\)到\((x,y)\)的方案数即为\(C_{x-i+y-j}^{x-i}\)。考虑当前颜色有\(B\)个,枚举的时间复杂度为\(O(B^2)\)。考虑枚举每一种颜色,算出这种颜色到其他格子方案数,有递推方程:\(f_{i,j}=f_......
  • CF1800F 题解
    Solution考虑转化题目条件,因为要求字符串恰好有\(25\)个字符,所以考虑枚举没出现过的字符,令其为\(k\)。再令\(f_{i,p}\)表示第\(i\)个字符串\(p\)字符出现次数的奇偶,于是题目条件即为:\(f_{i,k}=f_{j,k}=0\)。\(f_{i,p}+f_{j,p}\bmod2=1\)。于是考虑用一个\(2^{26......
  • CF622F The Sum of the k-th Powers 题解
    原式为\(k+1\)次多项式,所以需要\(k+2\)个点确定。然后转化,前缀和。\[\begin{equation}n=k+2\\\end{equation}\]\[\begin{equation}f(x)=\sum\limits_{i=0}^{n}y_i\prod\limits_{j=0,j\nei}^{n}\frac{x-x_j}{x_i-x_j}\end{equation}\]\[\begin{equation}x_0=......
  • AT_abc331_f [ABC331F] Palindrome Query 题解
    分析线段树。每个节点维护两个值:$s[l\dotsr]$和$s[r\dotsl]$。判断字串是否是回文直接就是询问的答案维护出来的两个值是否相同。首先想到用线段树暴力维护。第一个值很显然是两个儿子的第一个值加起来,第二个值是反着加起来。得到很酷的代码:ilvoidup(intnow){ tr[now......
  • AT_abc287_g [ABC287G] Balance Update Query 题解
    分析一眼分块。用值域分块来维护。先把所有的值离散化,使得至于不大于$n+q$。统计一下每个值的数量,每个块包含值的数量,每个块的价值和。修改值的时候先把原来值的数量,块包含的数量,块的价值剪掉被修改值的贡献,然后在新的值上面更新。修改数量直接改数量的变化贡献即可。找前$x$......
  • P8844 [传智杯 #4 初赛] 小卡与落叶 题解
    分析乱搞题。$1\len,m\le10^5$的时候就可以考虑乱搞了。发现每次操作$1$都会把上一次的操作$1$覆盖掉,那么第$i$个询问时树的颜色情况就是由前$1$个操作$1$决定。也就是说这个询问的内容变成了:在$x$为根的子树中,深度不小于$x'$的节点数量。$x'$是该操作$1$......
  • AT_abc287_g [ABC287G] Balance Update Query 题解2
    分析权值线段树。给每个节点赋一个值$val$和$a_i=val$的$b_i$之和。修改$a_x$的时候先将$a_x$的出现次数在树上剪掉$b_x$,再在$y$上面加上;修改$b_x$的时候直接加上变化量$y-b_x$。由于我们是要取前$x$大的$a_i$之和,在询问的时候有限考虑右儿子,然后在是当前......
  • AT_abc335_f [ABC335F] Hop Sugoroku 题解
    比E简单。分析考虑暴力DP。定义状态函数$f_i$表示最后一个黑点为$i$时的方案数,有:$f_i=\sum\limits_{j=1}^{i-1}f_j[(i-j)\bmodval_j=0]$。不难发现在使用刷表法的时候,转移代码:for(reintj=1;i+val[i]*j<=n;++j)f[i+val[i]*j]=(f[i+val[i]*j]+f[i])%p;这玩意复杂......
  • AT_abc190_e [ABC190E] Magical Ornament 题解
    分析考虑状压。定义状态函数$f_{i,j}$表示在得到$C$出现过的状态为$i$且排列末尾为$j$时的最小代价。则有转移方程:$f_{i,j}=\min{f_{i',k}+dis_{k,j}}$,保证$i'$表示集合属于$i$。$dis_{i,j}$跑最短路就行了,通过枚举$C_i$为起点可以做到$O(kn\logn)$的复杂度求......
  • CF1800F Dasha and Nightmares 题解
    分析考虑枚举。注意到第二个条件是必须要有$25$个字符在里面出现过,故考虑枚举唯一没出现过的字符$k$,然后再枚举$s_i$。令$cnt_{i,j}$表示$s_i$中字符$c$出现的奇偶性。如果有字符$c\nek\landcnt_{i,c}=0$,则在$s_j$中必有$cnt_{j,c}=1$;反之同理。枚举字符$c......