Помогите пожалуйста информатика 10 класс программирование - Компьютерные вопросы

Вопрос Помогите пожалуйста информатика 10 класс программирование

Регистрация
25 Июн 2013
Сообщения
67
Репутация
0
Спасибо
0
Монет
0
Кодовый замок

Ограничение по времени: 1 секунда

Ограничение по памяти: 256 мегабайт

В разведывательное управление доставили сейф с секретной информацией, кодовый замок на котором открывается комбинацией из nn цифр, каждая цифра может принимать b различных значений от 0 до b−1. Код неизвестен, однако разведчики передали несколько донесений о том, что сумма цифр кода в некоторых заданных позициях равна какому‑то известному числу. Используя информацию из всех полученных донесений, определите, сколько существует возможных кодов, удовлетворяющих этим условиям.

Формат входных данных

Первая строка входных данных содержит число b количество различных значений одной цифры кода, 2≤b≤10.

Вторая строка содержит число n количество цифр в коде, n≥1, bn≤60000.

Третья строка содержит число t количество имеющихся донесений о сумме каких‑то цифр кода, t≥1.

Следующие 2t строк содержат информацию об имеющихся донесениях. Каждое донесение состоит из двух строк. Первая из этих строк («маска цифр») содержит nn символов, записанных слитно и равных «0» или «1», где цифра «1» обозначает, что в донесении говорится об этой цифре кода. Например, маска цифр «01011» означает сумму цифр, стоящих коде на 2-й, 4-й и 5-й позициях. Во второй строке донесения записано число s, равное сумме цифр кода, стоящих на данных позициях.

Гарантируется, что каждая маска цифр содержит хотя бы одну единицу и что все маски цифр различаются. Общее число донесений может быть любым, удовлетворяющим этим условиям.

Формат выходных данных

Программа должна вывести одно целое число количество различных кодов, которые удовлетворяют всем донесениям.

Система оценки

Решения, правильно работающие, когда n≤4 и каждая маска цифр содержит ровно один символ «1», будут оцениваться в 28 баллов.

Решения, правильно работающие, когда n≤4, будут оцениваться в 64 балла.

Замечание

В примере из условия каждая цифра кода может принимать 8 различных значений от 0 до 7; код состоит из 3 цифр. Получено 2 донесения, из первого донесения известно, что сумма первой и второй цифр кода равна 7, из второго донесения известно, что сумма второй и третьей цифр кода равна 12. Существуют 3 кода, удовлетворяющие этим условиям: «075», «166», «257».

Ввод

8

3

2

110

7

011

12

Вывод

3
 
Регистрация
24 Ноя 2012
Сообщения
66
Репутация
0
Спасибо
0
Монет
0
by ChatGPT (первый ввод-вывод работает) import itertools

def check_report(code, masks, sums):
# Проверка всех донесений для данного кода
for mask, sum_value in zip(masks, sums):
current_sum = sum(code for i in range(len(code)) if mask == '1')
if current_sum != sum_value:
return False
return True

def count_valid_codes(b, n, masks, sums):
# Генерация всех возможных кодов
valid_codes = 0
all_codes = itertools.product(range(b), repeat=n)

for code in all_codes:
if check_report(code, masks, sums):
valid_codes += 1

return valid_codes

def main():
# Ввод данных
b = int(input())
n = int(input())
t = int(input())

masks = []
sums = []

for _ in range(t):
mask = input().strip()
s = int(input())
masks.append(mask)
sums.append(s)

# Подсчет количества валидных кодов
result = count_valid_codes(b, n, masks, sums)
print(result)

if __name__ == "__main__":
main()
 
Регистрация
8 Дек 2013
Сообщения
88
Репутация
0
Спасибо
1
Монет
0
def count_codes(b, n, t, reports):
from itertools import product

# Список для хранения ограничений
constraints = []

for i in range(t):
mask = reports[2 * i]
sum_value = int(reports[2 * i + 1])
positions = [j for j in range(n) if mask[j] == '1']
constraints.append((positions, sum_value))

valid_codes_count = 0

# Перебираем все возможные комбинации кодов
for code in product(range(b), repeat=n):
valid = True
for positions, sum_value in constraints:
if sum(code[pos] for pos in positions) != sum_value:
valid = False
break
if valid:
valid_codes_count += 1

return valid_codes_count

# Ввод данных
b = int(input())
n = int(input())
t = int(input())
reports = [input().strip() for _ in range(2 * t)]

# Вычисление количества кодов
result = count_codes(b, n, t, reports)
print(result)
 
Регистрация
15 Июн 2013
Сообщения
76
Репутация
0
Спасибо
0
Монет
0
from itertools import product
b = int(input())
p = int(input())
t = int(input())
c = []
for _ in range(t):
m = input().strip()
s = int(input().strip())
c.append((m, s))
r = 0
for x in product(range(b), repeat=p):
valid = True
for m, s in c:
if sum(x for i in range(p) if m == '1') != s:
valid = False
break
if valid:
r += 1
print(r)
 
Сверху Снизу