P7108 移花接木(分类讨论&思维)

题意

给定一棵无限高度的满 a a a叉树。

给定两个操作。

1.删除一个结点及其子树。

2.将一个结点及其子树移到另一个结点。

求将满 a a a叉树变成高度为 h h h的满 b b b叉树的最小操作数。


思路

分类讨论。

1.当 a > b a>b a>b时,显然我们只需用操作1。

对于第一层需要删 a − b a-b a−b次,第二层需要删 ( a − b ) b (a-b)b (a−b)b次,依次类推,到第 1 1 1到第 h h h层共需删 ∑ i = 1 h ( a − b ) b i − 1 \sum\limits_{i=1}^h(a-b)b^{i-1} i=1∑h​(a−b)bi−1

然后对于第 h + 1 h+1 h+1层的结点我们都需要删掉,操作 a b h ab^h abh次。

所以 a n s = a b h + ∑ i = 1 h ( a − b ) b i − 1 ans=ab^h+\sum\limits_{i=1}^h(a-b)b^{i-1} ans=abh+i=1∑h​(a−b)bi−1,后面是等比数列求和。

a n s = a b h + ( a − b ) ( b h − 1 ) h − 1 ans=ab^h+\dfrac{(a-b)(b^h-1)}{h-1} ans=abh+h−1(a−b)(bh−1)​

2.当 a ≤ b a\le b a≤b时。

考虑先补全第 1 1 1到第 h h h层,然后删掉第 h + 1 h+1 h+1层。

类似地,第一层需要补 ( b − a ) (b-a) (b−a)次,第二层需要补 ( b − a ) b (b-a)b (b−a)b。

共需要补 ( b − a ) ∑ i = 1 h b i − 1 (b-a)\sum\limits_{i=1}^hb^{i-1} (b−a)i=1∑h​bi−1次。

同时要删掉第 h + 1 h+1 h+1层的,要操作 a b h ab^h abh次。

注意到,补全的操作可以从第 h + 1 h+1 h+1层来移动,所以我们只需取 m a x { a b h , ( b − a ) ∑ i = 1 h b i − 1 } = a b h max\{ab^h,(b-a)\sum\limits_{i=1}^hb^{i-1}\}=ab^h max{abh,(b−a)i=1∑h​bi−1}=abh。


同时需要特判 b = 1 b=1 b=1 的情况,因为上面的两种情况的式子 b ≠ 1 b\ne1 b​=1。

即第 1 1 1层到第 h h h层共需删 h ( a − 1 ) h(a-1) h(a−1)次。

第 h + 1 h+1 h+1层需要删 a a a次。

a n s = ( a − 1 ) h + a ans=(a-1)h+a ans=(a−1)h+a。


代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
ll ksm(ll a,ll n){ll s=1;while(n){if(n&1) s=s*a%mod;a=a*a%mod;n>>=1;}return s;
}
ll a,b,h;
int main(){int t;scanf("%d",&t);while(t--){scanf("%lld%lld%lld",&a,&b,&h);if(b==1) printf("%lld\n",((a-1)*h%mod+a)%mod);else if(a<=b) printf("%lld\n",a*ksm(b,h)%mod);else printf("%lld\n",(a*ksm(b,h)%mod+(a-b)*(ksm(b,h)-1)%mod*ksm(b-1,mod-2)%mod)%mod);}return 0;
}

P7108 移花接木(分类讨论思维)相关推荐

  1. CF1471 D - Strange Definition(思维,分类讨论,lcm,gcd的性质,数论)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #694 (Div. 2) D 很好的一道数论思维题 D - Str ...

  2. 分类讨论 ---- 2020 icpc 上海 Walker (二分 or 思维分类讨论)

    题目链接 题目大意: 就是两个人在坐标轴上面,有起始的坐标p1,p2p1,p2p1,p2,和速度v1,v2v1,v2v1,v2,问你访问完这长度为nnn的数轴最短时间是多少? 解题思路: 大佬有直接二 ...

  3. Unfair contest 模拟-分类讨论

    题意 : 两人比赛,n个裁判,给分范围[1,h][1, h][1,h],去掉s个最高分和t个最低分,给出n - 1个裁判的给分,第n个裁判想让第1个人赢,并且最小化给1的分数a[n]a[n]a[n] ...

  4. 2020ICPC(上海) - Walker(分类讨论+二分)

    题目链接:点击查看 题目大意:在长度为 n 的数轴上给出两个人的初始位置和速度,问使得每个位置至少被一个人走过的时间是多少 题目分析:分类讨论题目,分四种情况讨论即可,设 p1 < p2: p1 ...

  5. 【UOJ#33】【UR #2】树上GCD(长链剖分/根号分类讨论)

    [UOJ#33][UR #2]树上GCD 求解树上两个点到lca的距离的最大公约数是k的对数 首先我们很容易就想到莫比乌斯反演,那么利用倍数形式,我们只需要求解是i的倍数的对数. 考虑枚举lca,这个 ...

  6. uoj#246. 【UER #7】套路(dp+分块?分类讨论?)

    题目链接 分析: 目前为止我只能理解dp部分 我就喜欢这种单纯不做作的题目 一看名字就明白了这道题的本质 中二的题目描述 很显然,我们的关键就是求出最小相似度 朴素算法n^4 如果我们现在有一个权值数 ...

  7. Vasya and Multisets CodeForces - 1051C 模拟|分类讨论

    题意:把数组分成两个集合 每个集合中元素数量为1的个数相同(此个数可以是0) 分析: 这类问题就是要各种可能情况考虑到     然后分类讨论     完整地正确分类就AC     否则gg 如果数量为 ...

  8. P3842 [TJOI2007]线段(线性dp,分类讨论)

    P3842 [TJOI2007]线段 题意 [TJOI2007]线段 题目描述 在一个 n×nn \times nn×n 的平面上,在每一行中有一条线段,第 iii 行的线段的左端点是(i,Li)(i ...

  9. HDU 6627 equation(模拟,分类讨论)

    题意:给你n个ai和bi,给你C,求解方程: 分析:初中数学,分类讨论破除绝对值符号.每两个零点之间的区域都对应一个一元一次方程,把这些零点排序之后可以很容易得到每个区间的方程,每个区间都解一个一元一 ...

最新文章

  1. cisco PIX防火墙的配置及注解完全手册
  2. 宝塔显示linux inode,Linux显示inode的信息
  3. Linux 性能測试工具
  4. 机房合作--gitee的使用
  5. extmail垃圾邮件存放垃圾邮件箱
  6. java+long是什么_Java中long的模运算符是什么? - java
  7. 天然气压缩因子计算软件_徐秀芬等:天然气加气站压缩机组效率的计算方法
  8. day9 java的静态代码块和代码执行顺序
  9. 将先前的提交分成多个提交
  10. pyspark对Mysql数据库进行读写
  11. Python利用shelve模块设计简单数据库程序
  12. Atitit 知识图谱解决方案:提供完整知识体系架构的搜索与知识结果overview
  13. vscode字体图标
  14. 怎样编辑pdf文件?手把手教你如何使用PDF编辑器
  15. Elasticsearch创建索引别名
  16. NetFPGA-SUME10G以太网接口仿真问题
  17. (二)PUN 2基本教程
  18. Java项目:jsp+servlet图书管理系统
  19. linux模拟usb发包,Linux下USB模拟ps2鼠标驱动
  20. 如何使用Jmeter对HTTP接口进行压力测试?

热门文章

  1. vscode配置python路径_Vscode的python配置(macOS)
  2. css3 3d x y z 轴,3D变形 CSS3 transform---rotateX(), rotateY(), rotateZ(), 透-站长资讯中心
  3. 计算机的c盘为什么总是分100g能更大吗,C盘空间越来越小,罪魁祸首原来是“它”,难怪100G也不够用!...
  4. python grad_在Python中实现Adagrad
  5. 小米海康威视 暑期实习前端面试
  6. 2023春 哈尔滨工业大学计算机系统大作业
  7. 修改redis配置文件redis.conf文件内容后,重启redis,所配置的属性没有生效
  8. Linux基础指令(含英文注释)
  9. 网络抓包神器-Charles使用指南
  10. “代理服务器拒绝连接“问题