新手天翼
题目描述 Description
我们知道在数学中有很多的几何图形,其中三角形和长方形是我们经常会接触到的。那么现在给你三角形的底边和高,以及长方形的长和宽,请你计算三角形的面积,长方形的周长和面积。
输入描述 Input Description
两行,第一行两个整数a,b,分别表示三角形的底边和高,且10000 ≤ a, b ≤ 100000
第二行两个实数c,d,分别代表长方形的长和宽,最后的结果可能会超过7位有效数字
输出描述 Output Description
第一行,一个正整数,表示三角形的面积(如果计算出的面积有小数,忽略小数部分)
第二行,一个小数,表示长方形的周长
第三行,一个小数,表示长方形的面积,保留四位小数
样例输入 Sample Input
60000 90000
345.12 82.271
样例输出 Sample Output
2700000000
854.782
28393.3675
@江齐悦
李素妍在2020-04-05 17:59:01追加了内容
对不起,是酷町堂的
高级光能
不知道为什么这题把自然数幂和函数的求和上限额外加了一个1,这样的话我们可能需要用二项式定理重新把原来的式子展开一遍……
前置芝士:伯努利数
如果不会伯努利数的话可以看一下这篇博客学习一下
前置芝士:多项式求逆
蛤?不会多项式求逆,可以出门左转你站模板区去学习一下
前置芝士:快速处理伯努利数
我们使用伯努利数的指数型生成函数来快速的预处理它
具体来讲我们有这样一个和式
\sum_{i}\frac{B(i)}{i!}z^{i}=\frac{z}{e^{z}-1}i∑i!B(i)zi=ez−1z
等会显然左边是一个无限和式,这东西显然没有办法计算啊
没关系啊,我们把e^{z}ez大力泰勒展开一下
e^{z}=\sum_{i}\frac{z^{i}}{i!}ez=i∑i!zi
那么我们要计算的式子就是
\frac{z}{\sum_{i}\frac{z^{i}}{i!}-1}∑ii!zi−1z
然后我们发现一个很尴尬的事实,这东西分母常数项是0求不了逆……
还好分子是zz所以我们上下同时除一个zz
\frac{1}{\sum_{i}\frac{z^{i}}{(i+1)!}}∑i(i+1)!zi1
那这样的话我们就可以愉快的多项式求逆然后把伯努利数的前nn项刷出来了~
本题题解
众所周知,标准的自然数幂和函数S(n,k)S(n,k)是等于\sum_{i=0}^{n-1}i^{k}∑i=0n−1ik的但是这题我们的循环上限变成了nn这就十分的难受了
所以设答案函数是f(n)f(n),我们先计算比较好算的f(n-1)f(n−1)然后再用一些科技把答案的系数展开就好了
那么在以下的讨论当中我们认为S(n,k)S(n,k)代表\sum_{i=0}^{n-1}i^{k}∑i=0n−1ik而不是\sum_{i=0}^{n}i^{k}∑i=0nik
题目中让我们求
\sum_{k=0}^{n}S(n,k)a(k)k=0∑nS(n,k)a(k)
强行用伯努利数展开一波可以得到
\sum_{k=0}^{n}a(k)\frac{1}{k+1}\sum_{i=0}^{k}{k+1 \choose i}B(i)n^{k+1-i}k=0∑na(k)k+11i=0∑k(ik+1)B(i)nk+1−i
接下来我们翻转后半部分的求和顺序
\sum_{k=0}^{n}a(k)\frac{1}{k+1}\sum_{i=1}^{k+1}{k+1 \choose k+1-i}B(k+1-i)n^{i}k=0∑na(k)k+11i=1∑k+1(k+1−ik+1)B(k+1−i)ni
让我们把组合数拆了搞成阶乘的形式
\sum_{k=0}^{n}a(k)k!\sum_{i=1}^{k+1}\frac{B(k+1-i)}{(k+1-i)!}\frac{n^{i}}{i!}k=0∑na(k)k!i=1∑k+1(k+1−i)!B(k+1−i)i!ni
接下来又是喜闻乐见的交换求和号环节了
\sum_{i=1}^{n+1}\frac{n^{i}}{i!}\sum_{k=i-1}^{n}a(k)k!\frac{B(k+1-i)}{(k+1-i)!}i=1∑n+1i!nik=i−1∑na(k)k!(k+1−i)!B(k+1−i)
如果我们令f,gf,g分别表示这两个式子的话
f(i)=\frac{B(i)}{i!}f(i)=i!B(i)
g(i)=a(i)i!g(i)=a(i)i!
式子会被写的好看一点
\sum_{i=1}^{n+1}\frac{n^i}{i!}\sum_{p-q=i-1}f(p)g(q)i=1∑n+1i!nip−q=i−1∑f(p)g(q)
似乎是个差卷积,众所周知我们的ntt只能处理和的卷积,所以让我们把g函数翻转一下
g_{r}(x)=g(n-x)gr(x)=g(n−x)
那么原来的式子就会变成
\sum_{i=1}^{n+1}\frac{n^i}{i!}\sum_{p+q=n+(i-1)}f(p)g_{r}(q)i=1∑n+1i!nip+q=n+(i−1)∑f(p)gr(q)
这样的话我们一波ntt然后除上一个阶乘就可以求出f(n-1)f(n−1)第i项系数了,让我们设这个东西为c_{i}ci接下来我们要做的是求出这个多项式的系数
\sum_{i=1}^{n+1}c_{i}(x+1)^{i}i=1∑n+1ci(x+1)i
做法简单粗暴,直接二项式定理展开一下
\sum_{i=1}^{n+1}c_{i}\sum_{j=0}^{i}{i\choose j}x^{j}i=1∑n+1cij=0∑i(ji)xj
让我们继续交换求和号,由于c_{0}=0c0=0所以我们无需担心求和下界的问题
\sum_{j=0}^{n+1}x^{j}\sum_{i=j}^{n+1}{i\choose j}c_{i}j=0∑n+1xji=j∑n+1(ji)ci
把组合数用阶乘拆了可以得到
\sum_{j=0}^{n+1}x^{j}\frac{1}{j!}\sum_{i=j}^{n+1}c_{i}i!×\frac{1}{(i-j)!}j=0∑n+1xjj!1i=j∑n+1cii!×(i−j)!1
设f,gf,g分别为
f(i)=c_{i}i!f(i)=cii!
g(i)=\frac{1}{i!}g(i)=i!1
那么我们会得到这样一个式子
\sum_{j=0}^{n+1}x^{j}\frac{1}{j!}\sum_{p-q=j}f(p)g(q)j=0∑n+1xjj!1p−q=j∑f(p)g(q)
看起来又是烦人的差卷积,没关系接着翻转数列,令
g_{r}(x)=g(n+1-x)gr(x)=g(n+1−x)
则原式为
\sum_{j=0}^{n+1}x^{j}\frac{1}{j!}\sum_{p+q=n+1+j}f(p)g(q)j=0∑n+1xjj!1p+q=n+1+j∑f(p)g(q)
然后我们大力ntt一波除个阶乘就行了
不是原创,望采纳谢谢