[洛谷P4492] [HAOI2018]苹果树
洛谷题目链接:[HAOI2018]苹果树
题目背景
HAOI2018 Round2 第一题
题目描述
小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C 发现每一天这棵树都会生长出一个新的结点.
第一天的时候, 果树会长出一个根结点, 以后每一天, 果树会随机选择一个当前树中没有长出过结点 的分支, 然后在这个分支上长出一个新结点, 新结点与分支所属的结点之间连接上一条边.
小 C 定义一棵果树的不便度为树上两两结点之间的距离之和, 两个结点之间 的距离定义为从一个点走到另一个点的路径经过的边数.
现在他非常好奇, 如果 \(N\) 天之后小 G 来他家摘苹果, 这个不便度的期望 \(E\) 是多少. 但是小 C 讨厌分数, 所以他只想知道 \(E \times N !\) 对 \(P\) 取模的结果, 可以证明这是一个整数.
输入输出格式
输入格式:
从标准输入中读入数据. 一行两个整数 \(N\), \(P\) .
输出格式:
输出到标准输出中. 输出一个整数表示答案.
输入输出样例
输入样例#1:
3 610745795
输出样例#1:
24
输入样例#2:
305 1000000007
输出样例#2:
865018107
说明

以上是所有 \(N = 3\) 时可能的苹果树形态, 其中编号表示这个结点是第几天生 长出来的, 显然每种情况两两结点的距离均为 \(4\) .
题解: 这个枚举方式比较神奇...我也不太清楚为什么可以做到不重不漏,有人会可以帮我分析一下...
直接讲方法吧:
首先考虑如何计算贡献,我们分每条边来计算贡献,那么总贡献就是\(\sum size*(n-size)\)
考虑当前枚举到了节点\(i\),它有一颗大小为\(j\)的子树,那么前\(i\)个节点可能组成的方案数是\(i!\),这个大小为\(j\)的子树的方案数有\(j!\)种,然后剩下的\(n-i-j\)个节点随便放,第一个节点可以放置的方案是\(i\)种,第二个是\(i+1\)种,那么剩下节点随便放的贡献就是\(\frac{(n-j)!}{(i-1)!}\),总贡献就是:$$\sum_{i=1}{n}\sum_{j=1}{n-i}i!2C_{n-i}^jj!j(n-j)\frac{(n-j)!}{(i-1)!}$$
因为不一定存在逆元,可以先递推杨辉三角,然后把最后那部分用组合数乘阶乘的形式表示出来.
当然这题也有\(DP\)的解法,有兴趣可以自己看看别的题解
#include<bits/stdc++.h>
using namespace std;
const int N = 2000+5;
int n, mod, fac[N], c[N][N], ans = 0;
int main(){
cin >> n >> mod; c[0][0] = fac[0] = fac[1] = 1;
for(int i = 1; i <= n; i++){
c[i][0] = 1;
for(int j = 1; j <= n; j++) c[i][j] = (c[i-1][j]+c[i-1][j-1])%mod;
}
for(int i = 1; i <= n; i++) fac[i] = 1ll*fac[i-1]*i%mod;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n-i; j++)
(ans += 1ll*fac[i]*2%mod*c[n-i][j]%mod*fac[j]%mod*j%mod*(n-j)%mod*c[n-j-1][n-i-j]%mod*fac[n-i-j]%mod) %= mod;
cout << ans << endl;
return 0;
}
[洛谷P4492] [HAOI2018]苹果树的更多相关文章
- 洛谷P4492 [HAOI2018]苹果树(组合数)
题意 题目链接 Sol 有点自闭,.我好像对组合数一窍不通(~~~~) Orz shadowice // luogu-judger-enable-o2 #include<bits/stdc++. ...
- [洛谷P4491] [HAOI2018]染色
洛谷题目链接:[HAOI2018]染色 题目背景 HAOI2018 Round2 第二题 题目描述 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度 ...
- 题解 洛谷 P4492 【[HAOI2018]苹果树】
考虑生成一颗二叉树的过程,加入第一个节点方案数为\(1\),加入第二个节点方案数为\(2\),加入第三个节点方案数为\(3\),发现生成一颗\(n\)个节点的二叉树的方案数为\(n!\). 所以题目中 ...
- 洛谷 P4495 [HAOI2018]奇怪的背包 解题报告
P4495 [HAOI2018]奇怪的背包 题目描述 小\(C\)非常擅长背包问题,他有一个奇怪的背包,这个背包有一个参数\(P\),当他 向这个背包内放入若干个物品后,背包的重量是物品总体积对\(P ...
- P4492 [HAOI2018]苹果树
思路 题目要求的其实就是每种方案的权值之和(因为每种方案的概率相等) 所以自然想到要求所有的边对最终答案的贡献次数 考虑这一条边被经过了多少次,有这个子树内的点数*子树外的点数次,即\(k\times ...
- 洛谷P4493 [HAOI2018]字串覆盖(后缀自动机+线段树+倍增)
题面 传送门 题解 字符串就硬是要和数据结构结合在一起么--\(loj\)上\(rk1\)好像码了\(10k\)的样子-- 我们设\(L=r-l+1\) 首先可以发现对于\(T\)串一定是从左到右,能 ...
- 洛谷P4494 [HAOI2018]反色游戏(tarjan)
题面 传送门 题解 我们先来考虑一个联通块,这些关系显然可以写成一个异或方程组的形式,形如\(\oplus_{e\in edge_u}x_e=col_u\) 如果这个联通块的黑色点个数为奇数,那么显然 ...
- 洛谷P4495 [HAOI2018]奇怪的背包(数论)
题面 传送门 题解 好神仙的思路啊--orzyyb 因为不限次数,所以一个体积为\(V_i\)的物品可以表示出所有重量为\(\gcd(V_i,P)\)的倍数的物品,而所有物品的总和就是这些所有的\(\ ...
- 洛谷 P2015 二叉苹果树 (树上背包)
洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以多叉转二叉),但是最近都刷树上背包的题,所以用了树上背包. 首先,定义状态\(d ...
随机推荐
- 如何:通过将HTML编码应用于字符串来防止Web应用程序中的脚本漏洞
当用户可以将可执行代码(或脚本)添加到您的应用程序中时,会发生大多数脚本攻击.默认情况下,ASP.NET提供请求验证,如果表单发布包含任何HTML,则会引发错误. 您可以通过以下方式帮助防止脚本漏洞利 ...
- CentOS 6.5以上版本安装mysql 5.7 完整版教程(修订版)
转载自:https://codeday.me/collect/20170524/21861.html 1: 检测系统是否自带安装mysql # yum list installed | grep my ...
- 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
前几天又看到这个面试题,再次看看 public class Jtest{ public static void main(String[] args) { StringBuffer a=new Str ...
- app流畅度测试--使用FPS Meter
1.FFPS Meter是一款非常实用的小软件,能够用数字实时显示安卓界面的每秒帧数,非常直观.此外,FPS Meter还可以显示最大帧数.最小帧数以及平均帧数,用来评价安卓流畅度极具价值.由于涉及到 ...
- jmeter发送json数据,报405、400错误解决方案
1.405错误解决方案:添加HTTP信息头管理器(错误因数:发送格式未设置) 2.400错误解决方案:json文本格式有误(注意:换行.空格等)解决方案:对照json文本数据(错误因数:发送的json ...
- 十三个有彩蛋的Linux命令
原文链接: https://my.oschina.net/u/4045573/blog/2986313 一键下载安装配置文本全部命令所需环境 sudo apt-get updategit clon ...
- c++11 左值引用、右值引用
c++11 左值引用.右值引用 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #i ...
- Mysql分页显示
第一部分:看一下分页的基本原理: mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20************* ...
- WEB入门 四 CSS样式表深入
学习内容 Ø CSS选择器深入学习 Ø CSS继承 Ø CSS文本效果 Ø CSS图片效果 能力目标 Ø 掌握CSS选择器的组合声 ...
- 【纪中集训2019.3.23】IOer
题目 描述 你要在\(m\)天内,刷\(n\)道题,每天可以刷的题的数目不限: 第\(i\)天可以刷的题目的种类是\(ui+v\): 两种刷题的方案不同当且仅当某天刷题的数量不同或者依次刷题的种类不同 ...