一个装备的升级所需要的材料1升2需要t,2升3需要t^2,t^3,t^4....也就是等比数列求和,等比数列求和公式a1*(d^n-1)/(d-1).答案要求取模,把/(d-1),变成*(d-1)对应的逆元即可(x的逆元=x^(mod-2)对mod取模的结果)。枚举每一个i,累加答案(a[i]*以t为首项t为公比的i项等比数列)即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int ksm(int a,int b){
int res=1;
在游戏中,装备的初始等级为一级,此后,每升一级需要融合一定数量的材料:一级升二级需要t个材料,二级升三级需要t2个材料,......,i级升i+1级需要ti个材料。 小红想要升级一些装备到目标的等级,他喜欢一次性收集完全部材料,请你帮助他计算出一共需要预先收集多少材料。
第一行输入两个整数n,t(1≤n≤105;1≤t≤108)代表装备数量、材料底数。 第二行输入n个整数a1,a2,...,an(0≤ai≤109)代表需要ai个等级为i的装备。
在一行上输出一个数字代表需要的材料数量。由于答案可能很大,请将答案对998 244 353取模后输出。
输入
5 2
0 0 1 2 3
输出
124
说明
一个三级装备需要21+22=6个材料;两个四级装备需要2∗(2+22+23)个材料