给你一个函数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
答案 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))