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

Репосты

28.03.2018, 17:22. Показов 24553. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стас — заядлый пользователь социальной сети «ВДрузьях». Как только он видит интересный пост в каком-нибудь паблике, он сразу репостит его к себе на стену. Иногда его друзья репостят к себе эти репосты из пабликов. Один и тот же пост может быть опубликован много-много раз!

Когда какой-нибудь пользователь социальной сети видит один из этих репостов, то некоторая величина (назовём её популярность) конкретно этого репоста увеличивается на единицу. На единицу также увеличивается популярность у того репоста, откуда был сделан этот репост, а также у того репоста, откуда был сделан этот предыдущий репост, и так далее по цепочке, до оригинального поста в паблике. Чем длиннее была цепочка репостов, тем у большего количества публикаций увеличится популярность (но у каждой публикации она увеличится ровно на единицу).

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

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

Формат ввода
В первой строке содержится целое число N (1 ≤ N ≤ 100) — количество записей в истории сайта. В следующих N строках содержатся сами записи.

Первая запись имеет вид «Название_паблика опубликовал пост, количество просмотров: X». Остальные записи имеют вид «Имя_человека отрепостил пост у Имя_человека или Название_паблика, количество просмотров: Y».

Записи в истории даны в хронологическом порядке. Название паблика и имена людей состоят только из русских букв. Имена всех репостивших пост людей различны и отличаются от названия паблика.

Формат вывода
Выведите N строк: для оригинального поста из паблика и каждого репоста выведите одно число — его популярность. Популярности выведите в хронологическом порядке репостов, то есть в том же порядке, в котором они даны во входном файле.

Пример
Ввод Вывод
5
ЯндексЛицей опубликовал пост, количество просмотров: 15
Иван отрепостил пост у ЯндексЛицей, количество просмотров: 40
Василий отрепостил пост у ЯндексЛицей, количество просмотров: 13
ОлегПетрович отрепостил пост у ЯндексЛицей, количество просмотров: 39
ПапаЖени отрепостил пост у ОлегПетрович, количество просмотров: 21
128
40
13
60
21
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.03.2018, 17:22
Ответы с готовыми решениями:

Репосты
Стас — заядлый пользователь социальной сети «ВДрузьях». Как только он видит интересный пост в каком-нибудь паблике, он сразу репостит его к...

Репосты
Стас — заядлый пользователь социальной сети «ВДрузьях». Как только он видит интересный пост в каком-нибудь паблике, он сразу репостит его к...

Репосты
Стас — заядлый пользователь социальной сети «ВДрузьях». Как только он видит интересный пост в каком-нибудь паблике, он сразу репостит его к...

6
 Аватар для GreatGandalf
9 / 9 / 0
Регистрация: 15.11.2017
Сообщений: 22
03.04.2018, 16:18
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
n = int(input())
s = input()
time = 0
public,like = s.split(' опубликовал пост, количество просмотров: ')
d = {public:[int(like),'root',time]}
for i in range(1,n):
    s = input()
    time += 1
    if ' отрепостил пост у ' in s:
        repost,s = s.split(' отрепостил пост у ')
 
        if ', количество просмотров: ' in s:
            autor,like = s.split(', количество просмотров: ')
            like = int(like)
            d[repost] = [like,autor,time]
            while autor != 'root':
                d[autor][0] += like
                autor = d[autor][1]
    elif 'количество просмотров: ' in s:
        s,like = s.split('количество просмотров: ')
        d[public][0] += int(like)
for x in sorted(d,key = lambda y: d[y][2]):
    print(d[x][0])
2
04.04.2018, 04:48

Не по теме:

GreatGandalf, неужели проще вбивать эти точки чем нажать кнопку "PYTHON" на панели инструментов?

0
 Аватар для GreatGandalf
9 / 9 / 0
Регистрация: 15.11.2017
Сообщений: 22
04.04.2018, 21:22
Black Fregat, конечно нет, теперь буду знать
1
2 / 2 / 0
Регистрация: 26.11.2019
Сообщений: 3
02.01.2020, 21:46
Немного изменил код GreatGandalf
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
n = int(input())
post = input().split(' опубликовал пост, количество просмотров: ')
popularity = {post[0]: [int(post[-1]), 'origin']}
for _ in range(n - 1):
    post = input()
    reposter, post = post.split(' отрепостил пост у ')
    author, views = post.split(', количество просмотров: ')
    popularity[reposter] = [int(views), author]
    while author != 'origin':
        popularity[author][0] += int(views)
        author = popularity[author][1]
for val in popularity.values():
    print(val[0])
0
2 / 2 / 0
Регистрация: 18.12.2021
Сообщений: 3
21.12.2021, 16:50
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
repost = {}
for i in range(int(input())):
    string = input().split()
    if i == 0:
        repost[string[0]] = [int(string[-1])] # здесь добавляем про паблик
    else:
        repost[string[0]] = [int(string[-1]), str(string[4:5])[2:-3]] # в текущую строку загружаем просмотры и автора репоста, у которого репостнул человек сейчас
keys = []
for i in repost.keys(): #создаем список ключей, к которому будем обращаться в обратном порядке, иначе счет популярности будет не верным
    keys.insert(0, i)
for i in keys[:-1]:
    repost[repost[i][1]][0] += repost[i][0] # немного сложная конструкция: во внутренней скобке repost[i][1] мы ищем человека, у которого был сделан репост, repost[repost[i][1]] - вот этим значением мы обращаемся к его имени как к ключу в словаре, а затем к его популярности, которая находится на нулевой позиции repost[repost[i][1]][0] прибавляем текущее значение просмотров repost[i][0]
for i in repost:
    print(repost[i][0])
0
12 / 11 / 3
Регистрация: 04.11.2024
Сообщений: 101
31.12.2024, 15:17
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
n = int(input())
s = input().split(' опубликовал пост, количество просмотров: ')
dict = {}
dict[s[0]] = s[-1]
alll = [] 
 
for i in range(n - 1):
    inline = input().split()
    alll.append(inline)
 
 
def a(alll, name, dict, nac):
    cnt = 0
    for j in alll:
        if j[4][:-1] == name:
            cnt += a(alll, j[0], dict, int(j[-1]))
        dict[name] = cnt + nac
    return cnt + nac
 
 
a(alll, s[0], dict, int(s[1]))
for k in dict:
    print(dict[k])
Добавлено через 10 минут
[PYTHON]
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
n = int(input())
s = input().split(' опубликовал пост, количество просмотров: ')
dict = {}
 
alll = [] 
 
for i in range(n - 1):
    inline = input().split()
    alll.append(inline)
    names = dict.keys()
 
 
def a(alll, name, dict, nac):
    cnt = 0
    for j in alll:
        if j[4][:-1] == name:
            cnt += a(alll, j[0], dict, int(j[-1]))
        dict[name] = cnt + nac
    return cnt + nac
    
    
print(a(alll, s[0], dict, int(s[1])))
for k in alll:
    print(dict[k[0]])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.12.2024, 15:17
Помогаю со студенческими работами здесь

Репосты
Дополнительные задачи макс. 33 балл. Дедлайн: 9 янв. 23:30 Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный...

Яндекс Метрика не отмечает репосты в соц.сети
Сделала на сайт http://biser-navki.xyz/slava_Perunu.html кнопку перепоста статьи ВКонтакте, и попыталась прикрутить счетчик Яндекса. ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru