1. 程式人生 > >2017浙江工業大學-校賽決賽 竹之書

2017浙江工業大學-校賽決賽 竹之書

rip += ++ end 現在 長度 clas 解法 long

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

2
4
1
2
3
4
6
5
6
7
8
9
9

Sample Output

4
32
解法:按照題意來,你會發現居然能過
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int t;
 4 unsigned long long Mod(unsigned long long x,unsigned long long a,unsigned long long mod){
 5     unsigned long long ans=0;
 6     ans%=mod;
7 while(a){ 8 if(a&1){ 9 ans=(ans+x)%mod; 10 } 11 ans%=mod; 12 a>>=1; 13 x=(x<<1)%mod; 14 } 15 return ans; 16 } 17 unsigned long long a[123456]; 18 int main(){ 19 scanf("%d",&t); 20 while(t--){ 21 unsigned long
long sum=0; 22 int n; 23 scanf("%d",&n); 24 for(int i=1;i<=n;i++){ 25 scanf("%llud",&a[i]); 26 sum+=a[i]; 27 } 28 unsigned long long ans=1; 29 for(int i=1;i<=n;i++){ 30 ans=Mod(ans,a[i],sum); 31 ans%=sum; 32 } 33 cout<<ans<<endl; 34 } 35 return 0; 36 }

2017浙江工業大學-校賽決賽 竹之書