【JZOJ4921】【NOIP2017提高组模拟12.10】幻魔皇
题目描述
幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对。
所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子。神奇的节点对则是指白色节点对。
请问对于深度为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】幻魔皇的更多相关文章
- 【NOIP2017提高组模拟12.10】幻魔皇
题目 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白色节 ...
- 【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇
题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光. 哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的. 哈蒙想 ...
- 【NOIP2017提高组模拟12.10】神炎皇
题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...
- 【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇
题目描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 数据范围 对于100%的数 ...
- NOIP2017提高组模拟赛 10 (总结)
NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...
- 【NOIP2017提高组模拟12.24】B
题目 现在你有N个数,分别为A1,A2,-,AN,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K( ...
- 【JZOJ4928】【NOIP2017提高组模拟12.18】A
题目描述 数据范围 对于100%的数据,n<=100000,1<=A[i]<=5000 =w= Ans=∏1ai 代码 #include<iostream> #inclu ...
- 【NOIP2017提高组模拟12.17】环
题目 小A有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字.对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求 ...
- 求hack or 证明(【JZOJ 4923】 【NOIP2017提高组模拟12.17】巧克力狂欢)
前言 本人在此题有一种不是题解的方法,但无法证明也找不到反例. 如果各位大神有反例或证明请发至 邮箱:qq1350742779@163.com Description Alice和Bob有一棵树(无根 ...
随机推荐
- Activiti 使用小结
自定义表单类型 使用动态表单,需要定义表单的字段以及属性,在WEB流程设计器中没有Default字段(Eclipse中有),给设计带来了一定的困难,下面介绍如何在WEB流程设计器中扩展表单. 首先在s ...
- 19-10-24-H
H H H H H H ZJ一下: T1只会暴力,测试点分治. (表示作者的部分分并没有给够,暴力加部分表按测试点分类可以得60吧……) T2先直接手玩第一个子任务. 然后就$Find$了一个神奇的( ...
- dubbo入门学习(三)-----dubbo整合springboot
springboot节省了大量的精力去配置各种bean,因此通过一个简单的demo来整合springboot与dubbo 一.创建boot-user-service-provider 本篇博文基于上篇 ...
- (二)通过JAVA调用SAP接口 (增加一二级参数)
(二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...
- Jmeter环境搭建及目录介绍
Jmeter环境搭建及目录介绍 运行环境:jmeter是基于java语言的,所有需要准备Java的JDK环境,并添加到环境变量中. 一.环境搭建及配置 1.JMeter的下载: 官网:http://j ...
- HDU6135 拓展KMP模板
emmm...模板,虽然每太搞懂 #include <iostream> #include <cstdio> #include <string.h> #pragma ...
- MySQL事务、锁机制、查询缓存
MySQL事务 何为事务? 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 一个事务可以是一条SQL语句,一组SQL语句或整个程序. 事务的特性: 事 ...
- eclipse配置mybatis xml文件自动提示
如果使用eclipse中,再写mybatis的xml文件的时候,没有提示,用“Alt+/”,不能把代码用快捷键敲出来,通过下面这个方法,可以解决. 1.下载一个文件,找一个专门的地方保存,配置自动提示 ...
- WPF 利用HwndSource拦截Windows消息
WPF提供了一个HwndSource可以使你更快的实现处理Windows消息. 通过HwndSource.FromHwnd得到的HwndSource可以添加(AddHook)移除(Remove)Hoo ...
- Pycharm如何在控制台输出窗口中使用Python解释器
打开菜单栏run->edit configurations,把下图中的复选框选中就可以了.