Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 30.08.2020, 15:57   #111
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,858
По умолчанию

Код:
n = int(input())
while n != 0:
    bit = 1
    while not (n & bit):
        bit *= 2
    print(bit)
    n = int(input())
PS. Чуть опоздал.

ViktorR, контрпример к вашему решению: количество шаров 6 и 10.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 31.08.2020 в 02:25.
BDA на форуме Ответить с цитированием
Старый 15.09.2020, 20:24   #112
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 73
По умолчанию

1)Гиперпереход, открытый ещё в начале XXI-го века, и сейчас остаётся основным способом перемещения на расстояния до сотен тысяч парсеков. Но совсем недавно физиками открыто новое явление. Оказывается, длительностью альфа-фазы перехода можно легко управлять. Корабль, находящийся в альфа-фазе перехода, накапливает гравитационный потенциал. Чем больше накопленный гравитационный потенциал корабля, тем меньше энергии потребуется ему на прыжок сквозь пространство. Ваша цель — написать программу, которая позволит кораблю за счёт выбора времени начала альфа-фазы и её длительности накопить максимальный гравитационный потенциал.
В самой грубой модели грави-интенсивность — это последовательность целых чисел pi. Будем считать, что если альфа-фаза началась в момент i и закончилась в момент j, то накопленный в течение альфа-фазы потенциал — это сумма всех чисел, стоящих в последовательности на местах от i до j.
Исходные данные
В первой строке входа записано целое число N — длина последовательности, отвечающей за грави-интенсивность (0 ≤ N ≤ 60000). Далее идут N строк, в каждой записано целое число pi (−30000 ≤ pi ≤ 30000).
Результат
Максимальный гравитационный потенциал, который может накопить корабль в альфа-фазе прыжка. Считается, что потенциал корабля в начальный момент времени равен нулю.

Мой вариант:
Код:
n = int(input())
sum = 0 + n
l = [sum]
for i in range(n):
    sum += int(input())
    l.append(sum)
l.sort()
if l[-1] < 0:
    print(0)
else:
    print(l[-1])
2)Группа людей состоит из N членов. У каждого члена группы есть друзья в этой группе, один или более. Напишите программу, которая разделит группу на две команды. Каждый член каждой команды должен иметь друзей в другой команде.
Исходные данные
Первая строка ввода содержит одно число N (N ≤ 100). Члены группы занумерованы от 1 до N. Вторая, третья, …, (N+1)-я строки содержат список друзей первого, второго, …, N-го членов группы соответственно. Списки друзей заканчиваются нулями. Помните, что отношение дружбы в группе всегда взаимное.
Результат
Первая строка вывода должна содержать количество людей в первой группе или ноль, если невозможно разделить людей на две группы. Если решение существует, выведите список первой группы во второй строке вывода. Числа должны быть разделены одиночными пробелами. Если существует более одного решения, можете вывести любое из них.

Это задание я не смог сделать, оно мне показалось очень сложным.
FsGaCh вне форума Ответить с цитированием
Старый 15.09.2020, 21:48   #113
ViktorR
Участник клуба
 
Регистрация: 23.10.2010
Сообщений: 1,788
По умолчанию

О контрпримере.
Чувствовал, что не всё так просто.
В начале написал такой код для проверки различных сочетаний, но не попал на ваш вариант.
Код:
def Change_Bolls(a, b):
    a, b = (max(a, b), min(a, b))
    if a == b:
        return 1
    count = 0
    while a != b:
        a, b = (max(a, b), min(a, b))
        a, b = a - b, b + b
        count += 1
        print(a, '   ', b, '   ', count)
        if a == b:
            return count + 1
#        elif (a + b) // 2:
#            return None
        

a = 6  # 263
b = 10 # 8153
print(Change_Bolls(a, b))
Мне непонятно условие, по которому надо тормозить, ибо этот код начинает непрерывно перекладывать, если переложить нельзя.
У меня нет критерия для "тормоза". Найденное мной решение "затормозило" мои размышления.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 15.09.2020, 21:56   #114
ViktorR
Участник клуба
 
Регистрация: 23.10.2010
Сообщений: 1,788
По умолчанию

О делении на команды.
Цитата:
Напишите программу, которая разделит группу на две команды. Каждый член каждой команды должен иметь друзей в другой команде.
А число членов в командах может быть разным, или команды должны быть одинаковыми по численности?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.09.2020, 02:59   #115
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,858
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
не всё так просто
Поэтому не могу придумать решение
Цитата:
Сообщение от ViktorR Посмотреть сообщение
непонятно условие, по которому надо тормозить
При раздумьях использовал два подхода: ограничение на количество перекладываний; сохранение всех предыдущих перекладываний и проверка, что такого разложения шаров еще не было. Правда это не приблизило к получению эффективного решения.
Цитата:
Сообщение от FsGaCh Посмотреть сообщение
Гиперпереход...Мой вариант
Вы таким образом рассмотрели только потенциалы альфа-фаз, которые начинались в момент времени 1, а заканчивались в момент времени J (где J меняет значения от 1 до N). Не считая того, что само число N не нужно прибавлять к сумме. И про ограничение потенциала нулем в условии тоже ничего нет. А нужно рассмотреть альфа-фазы 1 <= I <= J <= N (если N > 0).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 20.09.2020, 19:01   #116
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 73
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
О делении на команды.

А число членов в командах может быть разным, или команды должны быть одинаковыми по численности?
Да, количество членов может отличатся.
FsGaCh вне форума Ответить с цитированием
Старый 21.10.2020, 09:55   #117
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 73
По умолчанию

Два задания:

1)На каникулах Роман решил отдохнуть во Флатландии и арендовал себе апартаменты и роскошный автомобиль. Разумеется, такой автомобиль нельзя оставлять во дворе, поэтому Роман хочет также арендовать место на ближайшей охраняемой парковке. Поскольку он уже поиздержался с жильём и машиной, он хочет потратить на парковку как можно меньше бурлей.
На парковке доступны три тарифа аренды:
1. Заплатив a бурлей, можно использовать парковку в течение 1 дня.
2. Заплатив b бурлей, можно использовать парковку в течение одной недели, то есть 7 дней.
3. Заплатив c бурлей, можно использовать парковку в течение четырёх недель, то есть 28 дней.
Роман планирует отдыхать во Флатландии n дней. Любой тариф можно использовать произвольное количество раз, также можно арендовать парковку на суммарно больший срок, чем нужно. Какое минимальное количество бурлей придётся заплатить Роману, чтобы иметь возможность использовать стоянку все n дней?

Мой вариант (не завершён):
Код:
a, b, c = map(int, input().split())
n = int(input())
an = a
bn = b / 7
cn = c / 28
nl = [an, bn, cn].sort()
money = 0
if n % 7 == 0:
    if n % 4 == 0:
        money =
2)В одной стране все населённые пункты являются деревнями и расположены вдоль длинной прямой дороги. Всего вдоль дороги имеется n остановок, расстояние между любыми двумя соседними остановками равно одному километру. Рядом с некоторыми остановками расположены деревни.
Министерство транспорта решило запустить между деревнями рейсовые автобусы, ровно по одному маршруту из каждой деревни. Планируется, что автобус будет выезжать из деревни и двигаться направо вдоль дороги (в сторону увеличения номеров остановок) до тех пор, пока не встретит k деревень, либо не доедет до последней. После этого автобус будет возвращаться в начальную деревню. Так, для самой последней деревни автобус проедет расстояние 0 (направо, ему, конечно, ехать некуда, и, казалось бы, он вообще никому не нужен, но этот вопрос остаётся за рамками данной задачи). Необходимо посчитать длину маршрута каждого автобуса.

Мой вариант:
Код:
n = int(input())
l = input()
x = []
i = l.find('1') + 1
y = 0
lenl = False
while True:
    i = l.find('1') + 1
    lenl = False
    y = 0
    while y < n:
        if i == len(l) - 1:
            lenl = True
            x.append(y)
            break
        if l[i] == '1':
            y += 1
        i += 1
    if lenl:
        break
    else:
        x.append(i)
        i = l.find('1') + 1
        l = l[i-2:]
print(x)
Почему-то не работает.
FsGaCh вне форума Ответить с цитированием
Старый 22.10.2020, 06:09   #118
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,858
По умолчанию

По поводу первой задачи. Во-первых, пока у вас только ввод данных есть. А где еще идеи по поводу алгоритма? Во-вторых, по тексту задачки легко гуглится решение на плюсах, на первый взгляд подходящее.

По поводу второй задачи. Если верно понял идею, а именно, для каждой встреченной деревни поиск той деревни, до которой поедет автобус, то это не особо эффективно.
Код:
from collections import deque

n = int(input())
d = deque()
for i, s in enumerate(input()):
    if s == "1":
        if len(d) == n:
            t = d.popleft()
            print(2 * (i - t), end = " ")
        d.append(i)
i = d.pop()
for t in d:
    print(2 * (i - t), end = " ")
print(0)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 22.10.2020 в 19:47. Причина: исправление печати пробелов
BDA на форуме Ответить с цитированием
Старый 22.10.2020, 18:53   #119
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 73
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
По поводу первой задачи. Во-первых, пока у вас только ввод данных есть. А где еще идеи по поводу алгоритма? Во-вторых, по тексту задачки легко гуглится решение на плюсах, на первый взгляд подходящее.
Пробовал сам, остановился на чём-то вроде этого:
Код:
a, b, c = map(int, input().split())
n = int(input())
daysPassed = 0
prices = sorted([[a, a, 1], [b / 7, b, 7], [c / 28, c, 28]])
prices1 = []
cost = 0
print(prices)
while daysPassed <= n:
    print(prices, cost, daysPassed)
    if len(prices) == 0:
        print(2)
        break
    cost =+ prices[0][1]
    for i in prices:
        if cost in i:
            daysPassed += i[2]
            if daysPassed > n:
                daysPassed -= i[2]
                prices1.append(cost)
                cost -= prices[0][1]
                del prices[0]
                print(prices, cost, daysPassed)
            else:
                print(prices, cost, daysPassed)
                print(1)
                break
print(prices1.sort()[0])
Есть идеи?
FsGaCh вне форума Ответить с цитированием
Старый 24.10.2020, 06:01   #120
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,858
По умолчанию

Не уверен в 100% правильности:
Код:
import operator

def optimal_a(n, a, *_):
    return n * a

def optimal_b(n, a, b, *_):
    s = (n // 7) * b
    k = n % 7
    if k:
        return s + min(b, optimal_a(k, a))
    else:
        return s

def optimal_c(n, a, b, c):
    s = (n // 28) * c
    k = n % 28
    if k:
        return s + min(c, optimal_b(k, a, b), optimal_a(k, a))
    else:
        return s

a, b, c = map(int, input().split())
n = int(input())
calc = [(28 * a, optimal_a), (4 * b, optimal_b), (c, optimal_c)]
calc.sort(key = operator.itemgetter(0))
print(calc[0][1](n, a, b, c))
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
готовлюсь к олимпиаде по информатике salauat Паскаль, Turbo Pascal, PascalABC.NET 25 01.12.2013 20:32
Подготовиться к олимпиаде за лето UaKot Свободное общение 20 10.05.2013 17:53
Подготовка к региональной олимпиаде New man Помощь студентам 20 14.12.2012 20:01
Задачи по олимпиаде Darick Помощь студентам 7 23.12.2011 14:45
Как подготовиться к олимпиаде? Kn793 Помощь студентам 16 26.07.2008 11:22


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS