Hackerrank |最大化它

时间:2017-04-03 04:10:10

标签: python python-2.7

给你一个函数f(X)= X ^ 2.

您还获得K列表。该清单由Ni元素组成。

您必须从每个列表中选择一个元素,以便下面的等式最大化:

S =(F(X1)+ F(X2)+ ... + F(值Xk))%M

Xi表示从第i个列表中选取的元素。找到Smax获得的最大值。

%表示模运算符。

这是我写的代码。

n=list(map(int,raw_input().split()))
l=n[0]
div=n[1]
b=list()
for i in range(0,l):
    a=list()
    a.extend(map(int,raw_input().split()))
    b.append(max(a))
    su=0
for j in b:
    su+=j*j

print su%div

我不确定为什么代码在某些测试用例中失败。我不知道我哪里出错了。

我看到他们使用笛卡尔积的答案。

import itertools

k, m = map(int, raw_input().strip().split(' '))
a = []
for i in range(k):
    a.append(raw_input().split(' ')[1:])

mx = 0
for tp in itertools.product(*a):
    res = sum([int(x)**2 for x in tp]) % m
    if res > mx:
        mx = res

print mx

2 个答案:

答案 0 :(得分:0)

以下Python3中的代码。

import itertools

(K, N) = map(int, input().strip().split(' '))

# reading the K lines and appending lists to 'L'
L = list()
for i in range(K):
    l = list(map(int, input().strip().split(' ')))
    n = l[0]
    L.append(l[1:])
    assert len(L[i]) == n

S_max = 0
L_max = None

# Looping through Cartesian product of list and getting max sum.
for l in itertools.product(*L):
    s = sum([x**2 for x in l]) % N

    if s > S_max:
        S_max = s
        L_max = l

print(S_max)

答案 1 :(得分:-1)

from itertools import product
K,M = map(int,input().split())
N = (list(map(int,input().split()))[1:] for _ in range(K))
results = map(lambda x: sum(i**2 for i in x)%M,product(*N))
print(max(results))