P5011 水の造题

题目背景

第一分钟,CYJian 说:“要有样子。”于是便有了 $k$ 种动作。 第二分钟,CYJian 说:“要有活力。”于是便有了 $k$ 种动作组成的总动作数为 $N$ 的搏击操。 第三分钟,CYJian 说:“要有数学。”于是便有了一套搏击操的威力。 第四分钟,CYJian 说:“数字要小。”于是便有了一个伟大的模数 $19491001$。 第五分钟,CYJian 说:“要有规律。”于是便有了一套搏击操威力的计算方法。 第六分钟,CYJian 说:“要有限制。”于是便有了时空限制以及数据范围。 第七分钟,CYJian 说:“要有答案。”于是便有了这道题让你做掉。 …… 第 $*$ 分钟,巨佬 Imagine 说:“数据太水。”于是蒟蒻出题人疯了。(详见数据范围)

题目描述

现在有一套由 $k$ 种动作组成的动作总数为 $N$ 的搏击操。 已知第 $1, 2, \cdots, k$ 个动作的威力为 $a[1\cdots k]$。 且如果第一个动作后紧接着第二个动作,则威力会额外加上 $a[1]+a[2]$。 如果第二个动作后紧接着第三个动作,则威力会额外加上 $a[2]+a[3]$。 …… 如果第 $k$ 个动作后紧接着第一个动作,则威力会额外加上 $a[k]+a[1]$。 请求出最后动作的期望威力。 当然,还是要用伟大的模数 $19491001$ 来膜一膜的。

输入格式

第一行,一个正整数 $N$。 第二行,一个正整数 $k$。 第三行,$k$ 个正整数 $a[1\cdots k]$。

输出格式

一行,一个正整数表示期望的威力模 $19491001$ 的值。

说明/提示

### 样例解释 $x-y$ 表示第一个动作为 $x$,第二个动作为 $y$。 - $1-1$:$1+1=2$; - $1-2$:$1+2+(1+2)=6$; - $1-3$:$1+3=4$; - $1-4$:$1+4=5$; - $1-5$:$1+5=6$; - $1-6$:$1+6=7$; - $2-1$:$2+1=3$; - $2-2$:$2+2=4$; - $2-3$:$2+3+(2+3)=10$; - $2-4$:$2+4=6$; - $2-5$:$2+5=7$; - $2-6$:$2+6=8$; - $3-1$:$3+1=4$; - $3-2$:$3+2=5$; - $3-3$:$3+3=6$; - $3-4$:$3+4+(3+4)=14$; - $3-5$:$3+5=8$; - $3-6$:$3+6=9$; - $4-1$:$4+1=5$; - $4-2$:$4+2=6$; - $4-3$:$4+3=7$; - $4-4$:$4+4=8$; - $4-5$:$4+5+(4+5)=18$; - $4-6$:$4+6=10$; - $5-1$:$5+1=6$; - $5-2$:$5+2=7$; - $5-3$:$5+3=8$; - $5-4$:$5+4=9$; - $5-5$:$5+5=10$; - $5-6$:$5+6+(5+6)=22$; - $6-1$:$6+1+(6+1)=14$; - $6-2$:$6+2=8$; - $6-3$:$6+3=9$; - $6-4$:$6+4=10$; - $6-5$:$6+5=11$; - $6-6$:$6+6=12$。 $2+6+4+5+6+7+3+4+10+6+7+8+4+5+6+14+8+9+5+6+7+8+18+10+6+7+8+9+10+22+14+8+9+10+11+12=294$。 $294/36=49/6$。 $1/6 \equiv 16242501 \pmod{19491001}$。 $ans = 49 \times 16242501 \bmod 19491001 = 16242509$。 Subtask 1(20 pts):$1 \leq N \leq 10$,$1 \leq k \leq 7$; - Subtask 2(20 pts):$1 \leq N \leq 10^6$,$1 \leq k \leq 7$; - Subtask 3(20 pts):$1 \leq N \leq 10^{40000}$,$1 \leq k \leq 7$; - Subtask 4(20 pts):$1 \leq N \leq 10^{10^6}$,$1 \leq k \leq 7$; - Subtask 5(20 pts):$1 \leq N \leq 10^{10^6}$,$1 \leq k \leq 10^6$。 保证所有的数据:$1 \leq a[i] \leq 10^7$。 **注意:本题捆绑测试。** 小提示: 可以用下面的 $\texttt{inv(}x\texttt{)}$ 求出 $x$ 的逆元: ``` long long mod = 19491001; long long quick_pow(long long x, int k) { long long res = 1; while(k) { if(k & 1) res = res * x % mod; x = x * x % mod; k >>= 1; } return res; } long long inv(long long x) { return quick_pow(x, mod - 2); } ```