「SWTR-4」Meeting in the Forest
题目背景
每当月圆时分,五个族群的族猫们都会聚集在小岛上,进行每月的森林大会。蒟星为了了解其它五族猫的特点,就扮成了一只独行猫来到小岛上……
题目描述
森林大会上有 n n n 只猫,每只猫的武力值为 a i a_i ai,于是蒟星列出了下面这样一个方程:
x n + ∑ i = 1 n a i x n − i = 0 x^n+\sum_{i=1}^{n}a_ix^{n-i}=0 xn+i=1∑naixn−i=0
- 通俗地讲,这个方程就是 x n + a 1 x n − 1 + a 2 x n − 2 + ⋯ + a n − 1 x + a n = 0 x^n+a_1x^{n-1}+a_2x^{n-2}+\cdots+a_{n-1}x+a_n=0 xn+a1xn−1+a2xn−2+⋯+an−1x+an=0。
蒟星根据 TA 优(cu)秀(bi)的数学知识可以知道,这个方程在复数集内有 n n n 个根,不妨把这 n n n 个根设为 x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn。
接下来蒟星想要知道森林大会上的猫的实力如何,于是列出了下面一个表达式:
∑ i = 1 n ( b i × ∑ 1 ≤ j 1 < j 2 < ⋯ < j i ≤ n n x j 1 x j 2 ⋯ x j i ) \sum_{i=1}^{n}(b_i\times \sum_{1\le j_1 < j_2 <\cdots< j_i \le n}^{n}x_{j_1}x_{j_2}\cdots x_{j_i}) i=1∑n(bi×1≤j1<j2<⋯<ji≤n∑nxj1xj2⋯xji)
- ∑ 1 ≤ j 1 < j 2 < ⋯ < j i ≤ n n x j 1 x j 2 ⋯ x j i \sum_{1\le j_1 < j_2 < \cdots < j_i \le n}^{n}x_{j_1}x_{j_2}\cdots x_{j_i} ∑1≤j1<j2<⋯<ji≤nnxj1xj2⋯xji 就是从方程的 n n n 个根中选出 i i i 个,求所有可能方案的 i i i 个根的乘积之和。
但蒟星只要这个表达式对 1 0 9 + 7 10^9+7 109+7 取模后的值就好了。
- 若答案为负数 a a a,请输出 a + ( 1 0 9 + 7 ) a + (10^9+7) a+(109+7)。
蒟星把这个任务交给了您,不过他已经告诉你了 n n n, a i a_i ai 和 b i b_i bi,您能帮帮 TA 吗?
输入格式
第一行一个整数 n n n —— 表示方程的次数。
第二行 n n n 个整数 a 1 , a 2 , . . . a n a_1, a_2, ... a_n a1,a2,...an —— 意义见题目描述。
第三行 n n n 个整数 b 1 , b 2 , . . . b n b_1, b_2, ... b_n b1,b2,...bn —— 同上。
输出格式
输出一行,一个数,表示这个表达式对 1 0 9 + 7 10^9+7 109+7 取模后的值。
样例 #1
样例输入 #1
2
-2 1
1 1
样例输出 #1
3
样例 #2
样例输入 #2
3
-3 0 4
2 3 4
样例输出 #2
999999997
提示
【样例 1 1 1 说明】
原方程为 x 2 − 2 x + 1 = 0 x^2-2x+1=0 x2−2x+1=0,此时 x 1 = x 2 = 1 x_1=x_2=1 x1=x2=1。
表达式的值为 x 1 + x 2 + x 1 x 2 = 1 + 1 + 1 = 3 x_1+x_2+x_1x_2=1+1+1=3 x1+x2+x1x2=1+1+1=3。
【样例 2 2 2 说明】
原方程为 x 3 − 3 x 2 + 4 = 0 x^3-3x^2+4=0 x3−3x2+4=0,此时 x 1 = − 1 , x 2 = x 3 = 2 x_1=-1,x_2=x_3=2 x1=−1,x2=x3=2。
表达式的值为
2 ⋅ ( x 1 + x 2 + x 3 ) + 3 ⋅ ( x 1 x 2 + x 1 x 3 + x 2 x 3 ) + 4 ⋅ x 1 x 2 x 3 = 2 × ( − 1 + 2 + 2 ) + 3 × ( − 2 + ( − 2 ) + 4 ) + 4 × ( − 4 ) = − 10 \begin{aligned}&2\cdot (x_1+x_2+x_3)+3\cdot(x_1x_2+x_1x_3+x_2x_3)+4\cdot x_1x_2x_3\\=\ &2\times(-1+2+2)+3\times(-2+(-2)+4)+4\times (-4)\\=\ &-10\end{aligned} = = 2⋅(x1+x2+x3)+3⋅(x1x2+x1x3+x2x3)+4⋅x1x2x32×(−1+2+2)+3×(−2+(−2)+4)+4×(−4)−10
因为 − 10 -10 −10 为负数,所以输出 − 10 + ( 1 0 9 + 7 ) = 999999997 -10+(10^9+7)=999999997 −10+(109+7)=999999997。
【数据范围与约定】
对于 10 % 10\% 10% 的数据, n = 1 n=1 n=1。
对于另外 20 % 20\% 20% 的数据, n = 2 n=2 n=2。
对于 40 % 40\% 40% 的数据, n ≤ 10 n\leq 10 n≤10。
对于 60 % 60\% 60% 的数据, n ≤ 1 0 3 n\leq 10^3 n≤103。
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 2 × 1 0 5 1\leq n \le 2 \times 10^5 1≤n≤2×105, − 1 0 9 ≤ a i , b i ≤ 1 0 9 -10^9 \le a_i, b_i \le 10^9 −109≤ai,bi≤109。
【Tips】
韦达定理也许会对你有帮助。
【Source】
Sweet Round 04$\ \ $C
idea & std:蒟蒻的名字
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容