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

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

05.01.2021, 16:38. Показов 12266. Ответов 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
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru