NC213791. 永远亭的小游戏
描述
输入描述
第一行输入三个正整数,用空格隔开。分别代表辉夜、铃仙和因幡帝拿到的数组长度。
第二行输入个正整数,代表辉夜拿到的数组。
第三行输入个正整数,代表铃仙拿到的数组。
第四行输入个正整数,代表因幡帝拿到的数组。
数据范围:
输出描述
最后乘积的期望对取模的值。
示例1
输入:
2 2 2 1 2 1 1 2 4
输出:
500000008
说明:
C++(clang++11) 解法, 执行用时: 315ms, 内存消耗: 504K, 提交时间: 2020-11-22 18:52:40
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e3+5,mod=1e9+7; ll input(int n) { ll sum=0,x; for(int i=1;i<=n;i++){ scanf("%lld",&x); sum+=x; sum%=mod; } return sum; } ll q_pow(ll a, ll b) { ll res=1; while(b){ if(b&1)res=(res*a)%mod; b>>=1; a=(a*a)%mod; } return res; } int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); ll s1=input(n); ll s2=input(m); ll s3=input(k); //cout<<s1*s2*s3<<'\n'; printf("%lld\n",((s1*s2)%mod*s3)%mod*q_pow((((1ll*n*m)%mod)*k)%mod,mod-2)%mod); return 0; }
Python3(3.9) 解法, 执行用时: 957ms, 内存消耗: 206140K, 提交时间: 2021-02-22 16:12:41
import math def qpow(a,n,mod): res=1 while n: if n&1: res=res*a%mod a=a*a%mod n>>=1 return res nmk=list(map(int,input().split())) n=list(map(int,input().split())) m=list(map(int,input().split())) k=list(map(int,input().split())) mod=int(1e9+7) cnt=nmk[0]*nmk[1]%mod*nmk[2]%mod res=sum(n)*sum(m)%mod*sum(k)%mod t=math.gcd(res,cnt) res//=t cnt//=t print(res*qpow(cnt,mod-2,mod)%mod)