【NOIP2017提高组模拟12.18】A

题目

【NOIP2017提高组模拟12.18】A_第1张图片
Input

第一行一个整数n
接下来一个n个数,用空格隔开,即序列A

Output

一行一个整数,为答案

Sample Input

【样例输入1】
2
1 2
【样例输入2】
5 1401 110 4
17 12

Sample Output

【样例输出1】
499122177
【样例输出2】
391092926

Data Constraint

对于30%的数据,n<=9
对于另外10%的数据,所有的A[i]均相等
对于另外20%的数据,A[2~n]均相等
对于100%的数据,n<=100000,1<=A[i]<=5000

Hint

p有两个排列,{1, 2}与{2,1}
当p为{1,2}时,式子为1/(1*3)=1/2
当p为{2,1}时,式子为1/(2*3)=1/6
和为1/2,mod 998244353意义下为499122177

题解

在一番奇异的推解后发现答案是所有a[i]的乘积分之一(并不会证明3)

贴代码

const md=998244353;
var
    a,f,g,cc,sum:array[0..100005]of int64;
    i,j,n:longint;
    k,l,x,y,z,ans,tot:int64;
function quickmi(x,y:int64):int64;
var
    a,b,p:int64;
begin
    a:=x;
    b:=1;
    p:=y;
    while p>0 do
    begin
        if p mod 2=1 then b:=(b*a) mod md;
        a:=(a*a) mod md;
        p:=p div 2;
    end;
    exit(b);
end;
begin
    //assign(input,'t1.in'); reset(input);
    readln(n);
    for i:=1 to n do read(a[i]);
    readln;
    ans:=1;
    for i:=1 to n do ans:=(ans*a[i]) mod md;
    ans:=quickmi(ans,md-2);
    writeln(ans);
end.

你可能感兴趣的:(数学)