Форум сайта python.su
У меня есть задача:
Вася решил выложить бордюр из кипричей для дорожки на своем участке. Расположенный по соседству кирпичный завод выпускает кирпичи длиной A1, A2, …, Am. Промоутеры завода раздают потенциальным клиентам по 2 кирпича бесплатно. Вася взял по 2 кирпича каждого типа и теперь хочет узнать, может ли он выложить из них бордюр длиной N и толщиной в один кирпич.
Формат ввода
Сначала вводится число N (1 ≤ N ≤ 109), затем — число M (1 ≤ M ≤ 15) и далее M попарно различных чисел A1, A2, …, AM (1 ≤ Ai ≤ 109).
Формат вывода
Выведите сначала K — количество кипричей, которое нужно использовать для выкладывания бордюра, если можно выложить бордюр длиной ровно N. Далее выведите K чисел, задающих длины использованных кирпичей. Если решений несколько, выведите вариант, в котором Вася использует наименьшее количество кирпичей. Если таких вариантов несколько, выведите любой из них.
Если для выкладывания бордюра придется обязательно разломить какой-то кирпич, то выведите одно число 0. Если же у Васи не хватит кипричей, чтобы выложить бордюр, выведите одно число –1 (минус один).
Пример 1
Ввод Вывод
5 2
1 2
3
2 2 1
Пример 2
Ввод Вывод
7 2
1 2
-1
Пример 3
Ввод Вывод
5 2
3 4
0
Не могу найти неправильный вывод.
вот код:
n, m = list(map(int, input().split()))
k = list(map(int, input().split()))
k = sorted(k * m)
a = 0
b = 0
c =
d = 0
def r©:
c = str©.replace(',', ‘')
c = c.replace(’[', ‘')
c = c.replace(’]', '')
return c
if n < sum(k):
for i in k:
a = i
c =
for x in k:
i += x
c +=
if i == n:
d = len©
b = sorted©
break
if d > 0:
print(d)
print(r(b))
elif d == 0:
print(0)
elif n == sum(k):
a = len(k)
c = k
print(a)
print(r©)
else:
print(-1)
Офлайн
Оформите код в тег код пожалуйста. Нечетабельно. Покажите что выводит итд
Офлайн
Вот:
n, m = list(map(int, input().split()))
k = list(map(int, input().split()))
k = sorted(k * m)
a = 0
b = 0
c =
d = 0
def r(с):
c = str(с).replace(',', ‘')
c = c.replace(’[', ‘')
c = c.replace(’]', '')
return c
if n < sum(k):
for i in k:
a = i
c =
for x in k:
i += x
c +=
if i == n:
d = len c
b = sorted c
break
if d > 0:
print(d)
print(r(b))
elif d == 0:
print(0)
elif n == sum(k):
a = len(k)
c = k
print(a)
print(r c )
else:
print(-1)
Отредактировано andrey2255 (Июнь 8, 2016 10:00:44)
Офлайн
Что вот? Код должен выглядеть так:
def My(x): print x
Офлайн
не получается!!!! ПОМОГИТЕ КАК!
Офлайн
n, m = list(map(int, input().split()))
k = list(map(int, input().split()))
k = sorted(k * m)
a = 0
b = 0
c =
d = 0
def r(с):
c = str(с).replace(',', ‘')
c = c.replace(’[', ‘')
c = c.replace(’]', '')
return c
if n < sum(k):
for i in k:
a = i
c =
for x in k:
i += x
c +=
if i == n:
d = len c
b = sorted c
break
if d > 0:
print(d)
print(r(b))
elif d == 0:
print(0)
elif n == sum(k):
a = len(k)
c = k
print(a)
print(r c )
else:
print(-1)
Офлайн
n, m = list(map(int, input().split())) k = list(map(int, input().split())) k = sorted(k * m)[::-1] a = 0 b = 0 c = [] d = 0 def r(c): c = str(c).replace(',', '') c = c.replace('[', '') c = c.replace(']', '') return c if n < sum(k): for i in k: a = i c = [a] for x in k: i += x c += [x] if i == n: d = len(c) b = sorted(c)[::-1] break if d > 0: print(d) print(r(b)) elif d == 0: print(0) elif n == sum(k): a = len(k) c = k print(a) print(r(c)) else: print(-1)
Офлайн
выдаёт:
10 2 1 2 3 4 3 3 2 2
Офлайн
есть еще какой-то вариант который я не вижу. На нем тесты не проходят.
Офлайн
andrey2255Это неправильно, надо умножать не на m, а на 2.k = sorted(k * m)[::-1]
andrey2255Вот условие.
Промоутеры завода раздают потенциальным клиентам по 2 кирпича бесплатно.
andrey2255А вот то, чему может быть равно m.
число M (1 ≤ M ≤ 15)
Отредактировано py.user.next (Июнь 9, 2016 01:10:51)
Офлайн