码迷,mamicode.com
首页 > 其他好文 > 详细

2017浙江工业大学-校赛决赛 竹之书

时间:2017-08-14 18:58:56      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:sign   接下来   bit   include   mod   scanf   pre   space   return   

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浙江工业大学-校赛决赛 竹之书

标签:sign   接下来   bit   include   mod   scanf   pre   space   return   

原文地址:http://www.cnblogs.com/yinghualuowu/p/7358788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!