找到X的代码,使得乘积(A ^ X) * (B ^ X)最大化



求令(A ^ X) * (B ^ X)为最大值的X

给定A, B, N (X <2 ^ N)

返回最大乘积模10^9+7。

的例子:

A = 4
B = 6
N = 3
We can choose X = 3 and (A ^ X) = 7 and (B ^ X) = 5.
The product will be 35 which is the maximum.
下面是我的代码:

int limit = (1<<n) - 1;
int MOD = 1_000_000_007;
int maxProd = 1;
for(int i = 1; i <= limit; i++){
int x1 = (A^i);
int x2 = (B^i);
maxProd = max(maxProd, (x1*x2) % MOD);
}
return maxProd;
  1. for bits>=第n位,X为零,A^X和B^X为A和B
  2. 从0到n -1位找到A和B共享的集合位和零位。对于集合位,X在这里为零。对于0位,X将在那里为1。
  3. 对于A和B不相同的位,X将为0或1

从1,2,我们将得到A和B的值,用A和B表示。A和B是已知常数

来自3,我们会得到一堆2^k,比如2^3 2^1,…,它们的和是。Tot是已知常数

问题变成Max (a+tot-sth)*(b+sth),其中sth是3中某个2^k的子集和,而a、tot和b是常数

当(a+t -sth)和(b+sth)最接近时,乘积将达到最大值。

如果a==b,我们将第3步的最高位给a或b,其余的给另一个如果一个!=b,我们将把第3步中的所有位赋给较小的位

相关内容

  • 没有找到相关文章

最新更新