Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/56: Рейтинг темы: голосов - 56, средняя оценка - 4.75
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678

Радиоактивная порода

05.01.2021, 16:38. Показов 12136. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При добыче полезных ископаемых геологи обнаружили пласт с радиоактивными элементами. Отгружать излучающую породу нельзя, придется ждать, пока радиоактивный фон не снизится до приемлемого уровня.

Необходимо написать программу, которая определит, через какое время суммарный фон, создаваемый радиоактивными элементами пласта, снизится до допустимого уровня.

Формат ввода
Строка, в которой для каждого радиоактивного элемента через пробел записан его период полураспада (целое число дней).

Строка — распределение элементов в пласте породы.

Строка — активность каждого элемента из предыдущей строки.

Число — допустимый радиационный фон.

Формат вывода
Целое число — через какое количество дней суммарный радиационный фон снизится до допустимого уровня.

Список распределения конечной активности элементов в том же порядке.
Миниатюры
Радиоактивная порода  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2021, 16:38
Ответы с готовыми решениями:

Радиоактивная порода
При добыче полезных ископаемых геологи обнаружили пласт с радиоактивными элементами. Отгружать излучающую породу нельзя, придется ждать,...

Радиоактивная порода
Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или output.txt ...

Класс «Собака»: кличка, порода, рост по холке, окрас шерсти, вес, характер
помогите

12
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
05.01.2021, 20:19  [ТС]
есть маленькая проблема :ответы совершенно не совпадают с тем, что указано в тестовых заданиях.
Python
1
2
3
4
5
6
7
8
t = input().split() # названия элементов 
h = {t[i]: int(t[i + 1]) for i in range(0, len(t), 2)} # периоды полураспада
v = [i for i in zip(input().split(), map(float, input().split()))] # исходные излучения элементов
m = float(input()) # искомое суммарное излучение
i = 0 # номер дня
while sum([t[1] * 0.5 ** (i / h[t[0]]) for t in v]) > m: i += 1
print(i)
print(*[t[1] * 0.5 ** (i / h[t[0]]) for t in v])
Номер теста
1
Ввод
A 10 B 15
A B
0.8 0.6
0.9
Ожидаемый результат
15
0.4 0.3
Вывод
8
0.45947934199881396 0.4145738639903328
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
05.01.2021, 21:38
Лучший ответ Сообщение было отмечено Ychenyi как решение

Решение

Ychenyi, Замени
Python
1
(i / h[t[0]])
На
Python
1
(i // h[t[0]])
1
7 / 7 / 0
Регистрация: 27.02.2022
Сообщений: 35
24.12.2022, 14:00
Это работает, но как не скажу

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
arr = [elem for elem in input().split()]
arr = [(arr[i * 2:(i + 1) * 2][0], int(arr[i * 2:(i + 1) * 2][1])) for i in range(len(arr) // 2)]
key_array = []
 
Dict = dict()
main_decay = dict(arr)
now_decay = main_decay.copy()
 
for elem in input().split():
    if elem not in Dict:
        Dict[elem] = []
 
    key_array.append(elem)
 
elem = [float(x) for x in input().split()]
 
for i in range(len(elem)):
 
    if [] not in Dict[key_array[i]]:
        Dict[key_array[i]].append([])
 
    Dict[key_array[i]][Dict[key_array[i]].index([])].append(elem[i])
 
normal = float(input())
nod = int(list(main_decay.values())[0])
 
for elem in list(main_decay.values())[1:]:
    a, b = int(nod), int(elem)
 
    while a != 0:
        a, b = b % a, a
 
    nod = b
 
now = 0
 
while normal < sum(sum(sum(list(Dict.values()), []), [])):
    now += nod
    for key in main_decay.keys():
        if not now % main_decay[key] and key in Dict:
            for i in range(len(Dict[key])):
                for j in range(len(Dict[key][i])):
                    Dict[key][i][j] /= 2
 
answer_array = []
 
for elem in key_array:
    answer_array.append(Dict[elem][0][0])
    del Dict[elem][0]
 
print(now)
print(" ".join([str(x) for x in answer_array]))
1
740 / 622 / 151
Регистрация: 04.03.2022
Сообщений: 1,272
24.12.2022, 14:56
Как физик-ядерщик, я снова плачу...
Python
1
2
3
4
5
6
7
8
9
10
11
12
t = list(map(int, input().split()[1::2])) # названия элементов нам нафиг не нужны
input() # И снова они нам не нужны...
v = list(map(float, input().split())) # исходные излучения элементов
m = float(input()) # искомое суммарное излучение
i = 0 # номер дня
while True:
    if sum(map(lambda x: v[x] / 2 ** (i // t[x]) , range(len(t)))) <= m:
        print(i)
        print(*map(lambda x: v[x] / 2 ** (i // t[x]), range(len(t))))
        break
    else:
        i += 1
1
2 / 2 / 0
Регистрация: 08.01.2023
Сообщений: 6
09.01.2023, 19:30
Parramon, решение не соответствует условию задачи.
0
740 / 622 / 151
Регистрация: 04.03.2022
Сообщений: 1,272
09.01.2023, 20:18
Цитата Сообщение от LLoo Посмотреть сообщение
Parramon, решение не соответствует условию задачи.
И в чем несоответствие, может просветите?
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Всё, Parramon пойдет и убьет сибя апстену от горя
Даже не знаю, как я это переживу...
0
2 / 2 / 0
Регистрация: 08.01.2023
Сообщений: 6
10.01.2023, 02:18
В выводе
0
4 / 4 / 0
Регистрация: 31.12.2023
Сообщений: 18
03.01.2024, 12:06
Shipuchka_47, вот написал комментарии для объяснения Вашего кода:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Считываем данные о периодах полураспада и создаем словарь main_decay
arr = [elem for elem in input().split()]  # Ввод периодов полураспада и значений элементов
arr = [(arr[i * 2:(i + 1) * 2][0], int(arr[i * 2:(i + 1) * 2][1]))
       for i in range(len(arr) // 2)]  # Группируем элементы и их периоды полураспада в кортежи
main_decay = dict(arr)  # Создаем словарь с периодами полураспада
 
# Инициализация переменных
key_array = []  # Список для хранения названий радиоактивных элементов
Dict = dict()  # Словарь для хранения активностей радиоактивных элементов
 
# Создаем словарь Dict для хранения активностей радиоактивных элементов
for elem in input().split():
    if elem not in Dict:
        Dict[elem] = []  # Инициализируем пустой список для каждого элемента
 
    key_array.append(elem)  # Добавляем элемент в список
 
elem = [float(x) for x in input().split()]  # Вводим активности каждого элемента
 
# Заполняем словарь Dict значениями активности каждого элемента
for i in range(len(elem)):
    if [] not in Dict[key_array[i]]:
        Dict[key_array[i]].append([])  # Инициализируем пустой список для каждого значения активности
 
    Dict[key_array[i]][Dict[key_array[i]].index([])].append(elem[i])  # Добавляем активность в список
 
normal = float(input())  # Допустимый радиационный фон
 
# Находим наибольший общий делитель (НОД) для периодов полураспада
nod = int(list(main_decay.values())[0])
 
for elem in list(main_decay.values())[1:]:
    a, b = int(nod), int(elem)
 
    # Алгоритм Евклида для нахождения НОД
    while a != 0:
        a, b = b % a, a
 
    nod = b
 
now = 0  # Переменная для отслеживания времени
 
# Пока текущий радиационный фон больше допустимого, уменьшаем активность элементов
while normal < sum(sum(sum(list(Dict.values()), []), [])):
    now += nod  # Увеличиваем время на НОД периодов полураспада
 
    # Уменьшаем активность каждого элемента согласно периодам полураспада
    for key in main_decay.keys():
        if not now % main_decay[key] and key in Dict:
            for i in range(len(Dict[key])):
                for j in range(len(Dict[key][i])):
                    Dict[key][i][j] /= 2  # Уменьшаем активность вдвое
 
answer_array = []
 
# Формируем ответ в виде массива активностей элементов
for elem in key_array:
    answer_array.append(Dict[elem][0][0])
    del Dict[elem][0]
 
# Выводим результат
print(now)  # Выводим время, прошедшее с начала отсчета
print(" ".join([str(x) for x in answer_array]))  # Выводим окончательное распределение активности элементов
1
0 / 0 / 0
Регистрация: 04.01.2024
Сообщений: 14
11.01.2024, 21:39
спасибо большое!!! можете обьяснить пожалуйста 44 строчку, там очень много сумм как то, не очень понимаю для чего там еще столько пустых списков

Добавлено через 6 минут
и в 49 условие пожалуйста тоже
0
4 / 4 / 0
Регистрация: 31.12.2023
Сообщений: 18
11.01.2024, 21:47
kostyashka7529,


По поводу строчки 44: while normal < sum(sum(sum(list(Dict.values()), []), [])):

1. Dict.values(): Это возвращает представление всех значений в словаре Dict.

2. list(Dict.values()): Преобразует представление значений словаря в список.

3. sum(list(Dict.values()), []): Складывает все элементы вложенных списков значений словаря. Пустой список [] используется как начальное значение для аккумулирования.

sum(sum(list(Dict.values()), []), []): Повторяет шаг 3, чтобы снова сложить элементы списка, тем самым выполняя "раскрытие" вложенных списков.

Говоря в общем, выражение sum(sum(list(Dict.values()), []), []) создает одномерный список из всех значений в словаре Dict.

while normal < sum(sum(sum(list(Dict.values()), []), [])):: Это цикл while, который будет выполняться, пока значение переменной normal меньше суммы всех значений в словаре Dict.

Таким образом, данная строка кода означает, что цикл будет продолжаться, пока сумма всех значений активностей в словаре Dict больше значения переменной normal. Внутри цикла происходит уменьшение активности каждого элемента в соответствии с периодами полураспада, и время now увеличивается на значение НОД (наибольший общий делитель) периодов полураспада.






По поводу строчки 49: if not now % main_decay[key] and key in Dict:

1. now % main_decay[key]: Это условие проверяет, делится ли текущее время (now) на значение периода полураспада (main_decay[key]) без остатка. Если да, то условие возвращает True. В противном случае - False.

2. key in Dict: Это условие проверяет, существует ли ключ key в словаре Dict. Если да, то условие возвращает True. В противном случае - False.

3. not now % main_decay[key]: Это условие возвращает True, если now % main_decay[key] возвращает False, и наоборот. То есть, если текущее время не делится на значение периода полураспада без остатка.

Таким образом, вся строка кода означает следующее: если текущее время не делится на значение периода полураспада без остатка, и ключ key существует в словаре Dict, то выполнить блок кода, который находится внутри этого условия.




Может быть что-то не очень корректно написал, прошу прощения, попытался как можно более лучше описать
1
0 / 0 / 0
Регистрация: 04.01.2024
Сообщений: 14
11.01.2024, 22:00
большое спасибо, но вопросы были просто не просто в синтаксисе, а в самой логике этого выражения, как оно решает задачу)
почему если нацело не делится мы выполняем это условие, а не наоборот? я рассуждаю так: например у нас переменная now=5. а период полураспада 25. почему мы уменьшаем, если дни могли еще не пройти?

Добавлено через 2 минуты
а, я понял! у нас для этого not стоит)

Добавлено через 2 минуты
огромное спасибо, понял задачу!!
0
4 / 4 / 0
Регистрация: 31.12.2023
Сообщений: 18
11.01.2024, 22:01
kostyashka7529, Рад был помочь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2024, 22:01
Помогаю со студенческими работами здесь

Создать массив объектов класса «Собака». Элементы данных: порода, кличка, возраст
Покупатель хочет выбрать собаку определенной породы, которая не старше определенного возраста и стоит не дороже заданной суммы. Вывести на...

Написать программу для обработки информации о кошках, представленных на выставку (кличка, порода, возраст)
Доброго вечера , форум. Нуждаюсь в помощи в написании программы : ''Написать программу для обработки информации о кошках, представленных на...

Cоздать массив объектов класса «Собака». Элементы данных: порода, пол, возраст, кличка, цена
Помогите, пожалуйста! Cоздать массив объектов класса «Собака». Элементы данных: порода, пол, возраст, кличка, цена. Покупатель хочет...

Служебные собаки: порода, кличка, вес, год рождения. Вывод данных дополнить информацией о годности к службе (служебный в
Знаю что тема такая уже была в 2017 году, но там толком тема на мой взгляд не раскрыта. Мне нужно выполнить задание: а) ввод данных с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru