题目描述

幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对。

所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子。神奇的节点对则是指白色节点对。

请问对于深度为n的斐波那契树,其中距离为i的神奇节点对有多少个?拉比艾尔需要你对于1<=i<=2n的所有i都求出答案。

数据范围

对于100%的数据n<=5000。

=w=

性质:

以任意一个白点为根作子树时,在这棵子树中,白点和黑点的数量随深度呈斐波那契数列形态。

设当深度为i时,白点数量为w[i],白点数量前缀和为sum[i],黑点数量前缀和为f[i]。这些可以O(n)预处理。


我们对贡献分门别类:

1.lca是白点类

显然当两个点的lca是白点时,其中一个点是这个白点。

我们以每一个白点为根做子树来计算答案,具体地:

我们枚举一个i,表示这两个点的距离。

所有深度在[1,n−i]的白点都拥有与它距离为i的儿子,所以都可以对ans[i]作贡献。

然后这些白点的贡献都是相同的,而且都是w[i+1]。

那么对于一个i,ans[i]+=sum[n−i]∗w[i+1]。

2.lca是黑点类

同样枚举一个i和一个j,其中一个结点与lca距离为i,另一个结点与lca距离为j。

所有深度在[1,n−max(i,j)]的黑点都可以贡献ans[i+j]。

所以对于i,j,ans[i+j]+=f[n−max(i,j)]∗w[i]∗w[j+1]。

代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define ll long long
#define ln(x,y) (ll(log(x)/log(y)))
using namespace std;
const char* fin="raviel.in";
const char* fout="raviel.out";
const ll inf=0x7fffffff;
const ll mo=123456789;
const ll maxn=10007;
ll n,i,j,k;
ll f[maxn],g[maxn],sum[maxn],ans[maxn];
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d",&n);
f[1]=0;
f[2]=1;
for (i=3;i<maxn;i++) f[i]=(f[i-2]+f[i-1])%mo;
for (i=1;i<maxn;i++) f[i]=(f[i]+f[i-1])%mo;
g[1]=1;
g[2]=0;
for (i=3;i<maxn;i++) g[i]=(g[i-2]+g[i-1])%mo;
for (i=1;i<maxn;i++) sum[i]=(sum[i-1]+g[i])%mo;
for (i=1;i<n;i++){
k=n-i;
ans[i]=(ans[i]+sum[k]*g[i+1])%mo;
}
for (i=1;i<n;i++)
for (j=1;j<n;j++){
k=n-max(i,j);
ans[i+j]=(ans[i+j]+f[k]*g[i]%mo*g[j+1])%mo;
}
for (i=1;i<=n*2;i++) printf("%lld ",ans[i]);
printf("\n");
return 0;
}

=o=

我认为在做这道题的时候的瓶颈是正确地对贡献分门别类。

然后要先枚举距离,在根据这个距离计数。

由于问题是每种距离的个数,那么这个问题决定了这道题必须先枚举距离来计数的特点。

至今还在纠结正确的枚举方式是怎样。

还有待决定。

【JZOJ4921】【NOIP2017提高组模拟12.10】幻魔皇的更多相关文章

  1. 【NOIP2017提高组模拟12.10】幻魔皇

    题目 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白色节 ...

  2. 【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇

    题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光. 哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的. 哈蒙想 ...

  3. 【NOIP2017提高组模拟12.10】神炎皇

    题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...

  4. 【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇

    题目描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 数据范围 对于100%的数 ...

  5. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  6. 【NOIP2017提高组模拟12.24】B

    题目 现在你有N个数,分别为A1,A2,-,AN,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K( ...

  7. 【JZOJ4928】【NOIP2017提高组模拟12.18】A

    题目描述 数据范围 对于100%的数据,n<=100000,1<=A[i]<=5000 =w= Ans=∏1ai 代码 #include<iostream> #inclu ...

  8. 【NOIP2017提高组模拟12.17】环

    题目 小A有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字.对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求 ...

  9. 求hack or 证明(【JZOJ 4923】 【NOIP2017提高组模拟12.17】巧克力狂欢)

    前言 本人在此题有一种不是题解的方法,但无法证明也找不到反例. 如果各位大神有反例或证明请发至 邮箱:qq1350742779@163.com Description Alice和Bob有一棵树(无根 ...

随机推荐

  1. HZOI20190820模拟27题解

    A. 小奇挖矿2 显然的O(m)dp:$f[i]=max(f[i-4],f[i-7])+a[i]$,当然你要保证i,i-4,i-7都能到达 #include<iostream> #incl ...

  2. python-基础-面象对象

    1 类和对象 定义类 定义一个类,格式如下: class 类名: 方法列表 demo:定义一个Car类 # 定义类 class Car: # 方法 def getCarInfo(self): prin ...

  3. js 获取复选框 和 并改变状态

    function checkAll() { var checkbox = document.getElementById('vegeids');// var boxes = document.getE ...

  4. RMQ—ST表

    RMQ(Range Minimum/Maximum Query),RMQ是一个求给定范围内最大最小值的问题.我们一般使用st算法来解决这类问题(Sparse Table).这个算法原理不难,主要是各种 ...

  5. Laravel使用EasyWechat 进行微信支付

    微信支付和EasyWeChat这个包都是巨坑, 文档写的稀烂, 记录下防止以后又重复踩坑: 安装教程在这: https://www.jianshu.com/p/82d688e1fd2a

  6. idea小操作

    1.IDEA 实用功能Auto Import:自动优化导包(自动删除.导入包) 2.设置System.out.println();等快捷键 3.将idea的背景修改为图片 4.Linux ifconf ...

  7. BaiduTemplate [ 百度模板引擎 ]

    地址: http://baidufe.github.io/BaiduTemplate/

  8. sublime中用less实现css预编译

    实现css预编译的方式有很多,听说glup很流行而且功能也很强大,但是就目前的工作而言,仅要css预编译和YUIcompress就够了,接下来切入正题 Less 是一门 CSS 预处理语言,它扩展了 ...

  9. [LOJ2114][HNOI2015]-菜肴制作-拓扑排序+贪心

    <题面> 一个蒟蒻的痛苦一天 在今天的节目集训中,麦蒙将带领大家学习9种错误的解题策略 $15\%$算法(看两个就往下走吧) 1> puts("Impossible!&qu ...

  10. MVVM 一种新型架构框架

    MVVM是Model-View-ViewModel的简写.微软的WPF带来了新的技术体验,如Silverlight.音频.视频.3D.动画……,这导致了软件UI层更加细节化.可定制化.同时,在技术层面 ...