当前位置: 首页 > news >正文

UVA11955 Binomial Theorem 题解

UVA11955 Binomial Theorem

题目描述

Link: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=229&page=show_problem&problem=3106

PDF

输入格式

输出格式

输入输出样例 #1

输入 #1

3 (a+b)^1 (alpha+omega)^2 (acm+icpc)^3

输出 #1

Case 1: a+b Case 2: alpha^2+2*alpha*omega+omega^2 Case 3: acm^3+3*acm^2*icpc+3*acm*icpc^2+icpc^3

Solution

题目描述

  • 输入若干组形如( a + b ) k (a+b)^k(a+b)k的二项式,输出该二项式的展开式;

  • 这里的a , b a,ba,b可以是长度不超过 100 个字符的字符串。

  • 输出按照a aa的降幂排列。

分析

1. 组合数

一般地,要从k kk个元素中选择t tt个元素的方案数称为组合数,用C k t C_k^tCkt来表示,其计算公式为

C k t = k ! t ! × ( k − t ) ! C_k^t=\dfrac{k!}{t!\times(k-t)!}Ckt=t!×(kt)!k!
由于 Python 自带高精度,因此定义好求阶乘函数并按照上述公式定义求组合数的公式即可直接计算。参考代码(Python 中需要用双斜杠表示整除):

#求阶乘函数deffact(x):return1if(x==0orx==1)elsex*fact(x-1)#组合数函数defC(n,r):returnfact(n)//fact(r)//fact(n-r)

2. 二项式定理

( a + b ) k (a+b)^k(a+b)k展开式包含k + 1 k+1k+1项,这些项的系数依次是C k 0 , C k 1 , … , C k k C_k^0,C_k^1,\ldots,C_k^kCk0,Ck1,,Ckk,也即
( a + b ) k = C k 0 × a k b 0 + C k 1 × a k − 1 b 1 + C k 2 × a k − 2 b 2 + … + C k k × a 0 b k (a+b)^k=C_k^0\times a^kb^0+C_k^1\times a^{k-1}b^1+C_k^2\times a^{k-2}b^2+\ldots+C_k^k\times a^0b^k(a+b)k=Ck0×akb0+Ck1×ak1b1+Ck2×ak2b2++Ckk×a0bk

3. 连接每一项

上述二项展开式从结构上可以看作是若干个字符串由加号进行连接的结果。在 Python 中可以使用"+".join(列表)的方法用加号连接一个列表中的所有元素,由此我们可以考虑将二项式的所有展开项存放在一个列表中进行连接。

4. 输出

4.1 特别注意k = 1 k=1k=1

这里的输出首先需要特判k = 1 k=1k=1的情况,如果次数为1 11,直接用加号连接两个变量名输出即可:

#特判次数为1的情况, 末尾不能输出^1if(p==1):return"%s+%s"%(v1,v2)
4.2 把每一项制成字符串

其他情况下,按照二项式定理确定每一项的次数和系数,使用%d%s格式化数字和变量名组成相应的字符串存入列表即可。需要说明的是不能输出“1 11次幂” 或者系数1 11。同样,开头和结尾次数为0 00要连同变量名都不输出,参考代码:

forkinrange(p,-1,-1):if(k!=0andk!=p):result.append("%d*%s^%d*%s^%d"%(C(p,k),v1,k,v2,p-k))elif(k==0):result.append("%s^%d"%(v2,p))elif(k==p):result.append("%s^%d"%(v1,p))
4.3 判断幂次为1 11

判断幂次/系数为1 11容易想到的办法是直接replace("^1",""),但是由于题目中k ≤ 50 k\le 50k50,这会导致幂次为11 ∼ 19 11\sim 191119时,十位的1 11被错误移除,因此这个方法不可行。判断幂次为1 11的正确方法是判断这个^1后面是不是紧挨着乘号或者加号,这是这个问题的关键。参考代码:

return"+".join(result).replace("^1*","*").replace("^1+","+")
4.4 处理输入的内容

输入的两个变量和次数全部出现在同一行,一种可行的处理方法是将左括号(移除,+)^全部替换为空格,然后用split()将表达式拆分为一个长度为 3 的列表。例如输入(alpha+omega)^3,拆分后的结果为["alpha","omega","3"],列表第一个元素是变量名,第二个元素是另一个变量名,第三个元素转化为整数即为次数,按照 4.1~4.3 的方法处理即可。

完整代码

笔者认为分析中 4.1~4.3 的部分宜封装为函数来完成,代码中对于这些函数的功能已经给出了相应的说明。

#求阶乘函数deffact(x):return1if(x==0orx==1)elsex*fact(x-1)#组合数函数defC(n,r):returnfact(n)//fact(r)//fact(n-r)#输出展开式的某一部分, v1,v2是前后两个变量名,k为系数,p为次数defoutput(v1,v2,p):result=list()#特判次数为1的情况, 末尾不能输出^1if(p==1):return"%s+%s"%(v1,v2)#次数不为1的话就构造字符串forkinrange(p,-1,-1):if(k!=0andk!=p):result.append("%d*%s^%d*%s^%d"%(C(p,k),v1,k,v2,p-k))elif(k==0):result.append("%s^%d"%(v2,p))elif(k==p):result.append("%s^%d"%(v1,p))#次数不为1的情况下,出现的^1全部都紧挨着加号或乘号,可以利用这一点将其移除return"+".join(result).replace("^1*","*").replace("^1+","+")n=int(input())foriinrange(1,n+1,1):expr=input()var=expr.replace(')^',' ').replace('+',' ').replace('(','').split()x=var[0]y=var[1]print("Case %d:"%i,output(x,y,int(var[2])))

Extra

从效果上看,本题相当于 Mathematica 中 Expand 函数的简化版本。

http://www.jsqmd.com/news/860673/

相关文章:

  • 3分钟掌握iTorrent:让iPhone变身专业种子下载器的终极指南
  • 徐海君麻辣烫汤底是清水吗?门店真实出品:纯清水、零添加、无底料 - 中媒介
  • 贵阳黄金回收别踩坑!5.21 实测 3 家店,避开压价和隐形扣费 - 资讯纵览
  • SciencePlots科研图表样式库:7天快速制作专业学术图表的终极指南
  • 2026深圳搬家公司排名 5家靠谱机构实测推荐 - 从来都是英雄出少年
  • 中央空调节能改造常见问题解答(2026最新专家版) - 资讯纵览
  • 2026年AI面试准确率TOP榜:92%一致性背后,谁在定义行业新标准?
  • 凡亿AD22--AD软件泪滴的添加与移除
  • 意识的“调谐客观还原”理论
  • 毕业设计精选【芳心科技】无人机定点投放控制
  • Re: Linux系统篇(十八)进程篇·三:深度硬核!全面起底 Linux 进程状态变化与内核链表动态解绑
  • Go 内存优化骚操作
  • AI+HR 全生命周期智能管理实战指南:从概念到落地,解锁组织效能新增长!​
  • 5.21 西安今日金价|3 家回收商深度对比,本地人卖金参考 - 资讯纵览
  • 社区疫情防控管理系统(10081)
  • 运放电源端串联磁珠
  • 惠普tank1005屏幕显示 er-08 ,加了粉还是报错er08,黄灯闪烁成像鼓接近寿命期限?亲测有效。
  • 匠心铸杆,守护平安—四川耀霖深耕成都交通杆件交安杆件十五年 - 资讯纵览
  • RAG:终结AI幻觉,让你的大语言模型秒变“知识渊博”!
  • 企业存储避坑指南|西部数据WUS721208BLE604实测,8TB大容量刚需党必看
  • 【YOLOv8多模态融合改进】| IEEE2025 分层特征融合模块HFF 自适应权重 + 三重注意力,强化弱小目标细节保留
  • 【项目实训(个人8)】
  • 毕业设计 深度学习安全帽佩戴检测(源码+论文)
  • Java全栈工程师面试实录:从基础到微服务的深度技术对话
  • 电力设备RK3568/RK3576+FPGA,多系统混合部署Linux+RTOS RT-THREAD,强实时性
  • 20252904 2025-2026-2 《网络攻防实践》第8周作业
  • 5.21 实测报价!淮北黄金回收门店,哪家报价最良心? - 资讯纵览
  • 一多操作系统的接口设计语言:链式架构是血液系统,树形架构是生长的器官,配置文件即编程
  • 2026 年海南公司变更代办机构排名完整版,哪家最靠谱?公司名称、地址、法人、股权、经营范围等变更 - 资讯纵览
  • 2025_NIPS_Language Models Don‘t Always Say What They Think: Unfaithful Explanations in Chain-of-T...