题解 | C. 老师的求和
S 老师的公式
https://ac.nowcoder.com/acm/contest/76652/A
来个没算法基础也能通过本题的做法。
首先直接带入即可。
也非常好求,本质是一个等差数列的求和公式。我们可以写为:
对于,我们需要将
到
进行求和。我们可以先将
算出来的
进行化简,得出
(
为根据
计算出来的系数),然后分别用平方和公式
即可计算出
用同样的方式可以计算:首先根据刚刚算出的
得出的结果,展开并合并系数后,得到
中
这三项的系数,然后用立方和公式
以及平方和公式即可求出
参考代码(硬推了12分钟推出来的):
#include<bits/stdc++.h>
using namespace std;
#define int long long
int mod=998244353;
int power(int a,int b){
int res=1;
while(b){
if(b&1)res=res*a%mod;
b>>=1;
a=a*a%mod;
}
return res;
}
int inv(int x){
return power(x,mod-2);
}
signed main(){
long long n;
int _;
cin>>_;
while(_--){
int a,b,x;
cin>>a>>b>>x;
cout<<(a*x+b)%mod<<" ";
int aa=a*inv(2)%mod,bb=(a*inv(2)+b)%mod;
cout<<((aa*x%mod*x%mod)+bb*x%mod)%mod<<" ";
cout<<(aa*x%mod*(x+1)%mod*(2*x+1)%mod*inv(6)%mod+x*(x+1)%mod*inv(2)%mod*bb%mod)%mod<<" ";
int aaa=aa*inv(3)%mod,bbb=(aa+bb)*inv(2)%mod,ccc=(aa*inv(6)%mod+bb*inv(2)%mod)%mod;
cout<<(((x*x+x)%mod*inv(2)%mod)*((x*x+x)%mod*inv(2)%mod)%mod*aaa%mod+
bbb*x%mod*(x+1)%mod*(2*x+1)%mod*inv(6)%mod+
x*(x+1)%mod*inv(2)%mod*ccc%mod)%mod<<'\n';
}
}
/*
ax+b
x*(x+1)*(2x+1)/6 x*(x+1)/2
a/2*x^2+(a/2+b)x
a*(1+x)*x/2+bx
*/