链接:https://ac.nowcoder.com/acm/contest/551/F
来源:牛客网
第一行有两个整数 w 和 q ,其中 w 的含义如题意所述, q 表示接下来的询问次数。
对于每一次询问, 在一行输出一个整数 v ,表示 v=2nn!⋅anmod 998244353v=2nn!⋅anmod 998244353
1 2 1 2
1 3
思路:看到题目有个2^n* n! * an 这种不常见的东西,猜测an跟2^n*n!有关
样例中w=1时,打表发现当n=1时,an = a1 = 1/2,当n=2时,an = a2 = 3/8,首先猜了一发a_n = (2*n-1)/pow(2,2n-1)。打表后得到第四项代入发现等式并不成立。
然后再猜了一下a_n = k/(2^n * n!)。。代入后发现这k就是个等比数列的乘积,即k = 1*3*5*....*(2n-1);
然后v就是k了,因为分母给消掉了。最后别忘了,在最开始的时候乘上w。
感受:做成了打表找规律题海星,等题解的一手正解。
代码:
#include<bits/stdc++.h> using namespace std; #define LL long long #define INF 2000000000 const LL mod = 998244353; LL d[1000001]; void init(LL w){ d[1] = w; for(int i = 2 ; i <= 1000000; i ++){ d[i] = (d[i-1] * (2*i-1))%mod; } } int main() { LL w,q; cin>>w>>q; init(w); while(q--){ LL n; cin >> n; cout<<d[n]<<endl; } }
原文:https://www.cnblogs.com/Esquecer/p/10632046.html