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

Репосты

28.03.2018, 17:22. Показов 24642. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru