解题思路
给出 n
个组,第 i
组有 m
个数。一组数的权值表示为该组数所有数的乘积,找出权值最大的组,输出权值对 mod
取模后的值。
对于每组数据中的每个数 val
,保证 val
是 k
的非负整数次幂。
。
求出每组数的幂次之和 sum
,最大的 sum
记为 ma
。
则最大权值为 。
函数 myPow(k, n, mod)
是计算 k
的 n
次方的值,并对 mod
取模。
C++代码
#include<cstdio> #include<algorithm> using namespace std; long long myPow(int k, int n, long long mod){ if(n == 0) return 1; if(n == 1) return k % mod; long long a = myPow(k, n/2, mod); long long ans = a * a % mod; if(n % 2 == 1) ans *= k; return ans % mod; } int main(){ int n, m, k; long long mod; scanf("%d%d%d%lld", &n, &m, &k, &mod); int ma = 0; long long val; for(int i=0; i<n; ++i){ int sum = 0; for(int j=0; j<m; ++j){ scanf("%lld", &val); int tmp = 0; while(val != 1){ ++tmp; val /= k; } sum += tmp; } ma = max(ma, sum); } if(k == 1){ printf("1\n"); return 0; } long long ans = myPow(k, ma, mod); printf("%lld\n", ans); return 0; }