竹之书

来源:互联网 发布:卸载office2010的软件 编辑:程序博客网 时间:2024/04/27 19:23

竹之书

                                                                            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
                                                                                                         Total Submission(s): 548    Accepted Submission(s): 86


Problem Description
由于某些原因菲莉丝拿到了贤者之石,所以好像变得很厉害了
好像变得很厉害的菲莉丝想要炼成幻想乡,其中有一个原料是稗田一族对幻想乡历史的记录。现在菲莉丝拿到了一个被某只魔粘性精神体加密过的的卷轴。
密文通过原文和一个正整数key加密形成,而key和密文又有一定关联。
现给出密文,求key值

已知密文s和key值关系如下
已知密文s是一串正整数s1,s2,s3……sn,A为s中所有元素的和,B为s中所有元素的积,key为B mod A

数据范围
si,A在(0,1e17]范围内
0<n<=100000
 

Input
第一行T表示数据组数
接下来每组第一行一个n,代表s的长度
接下来n行,每行一个正整数si
 

Output
每组一行,key值
 

Sample Input
2412346567899
 

Sample Output
432
 

C++处理溢出小技巧


#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <vector>#include <set>#include <bitset>#include <stack>#include <map>#include <climits>#include <functional>using namespace std;#define LL long longconst int INF=0x3f3f3f3f;int t,n;long long a[100009],s,ans;LL mul(LL a,LL b){    LL res=0;    while(b)    {        if(b&1) (res+=a)%=s;        a=(a<<1)%s;        b>>=1;    }    return res;}int main(){    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        s=0,ans=1;        for(int i=1;i<=n;i++) scanf("%lld",&a[i]),s+=a[i];        for(int i=1;i<=n;i++) ans=mul(ans,a[i]);        printf("%lld\n",ans);    }    return 0;}


java

import java.math.BigInteger;import java.util.Scanner;public class Main {    public static void main(String[] args) {        int N;        Scanner cin=new Scanner(System.in);        N=cin.nextInt();        while(N>0){            N--;            int n;            n=cin.nextInt();            BigInteger v[]=new BigInteger[100010];            BigInteger a=BigInteger.ZERO,b=BigInteger.ONE;            for(int i=0;i<n;i++){                v[i]=cin.nextBigInteger();                a=a.add(v[i]);            }            for(int i=0;i<n;i++){                v[i]=v[i].mod(a);                b=b.multiply(v[i]).mod(a);            }            System.out.println(b);        }        cin.close();    }}

0 0