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

Репосты

28.03.2018, 17:22. Показов 24416. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru