Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18

"Видимые числа"

20.11.2020, 23:05. Показов 3267. Ответов 26

Студворк — интернет-сервис помощи студентам
В строке записано n чисел (1 ≤ n ≤ 10 в 5 степени). Каждое записанное число hi является положительным (1 ≤ hi ≤ 10 в 9 степени). Также известно в которую из сторон может «смотреть» число (H - влево строки, W - вправо строки). Считается, что число hi видит число hj если:

а) число hi смотрит в сторону hj;

б) все числа которые записаны между ними не больше hj

Нужно посчитать сколько цифр видит каждое число отдельно.
Input format
Первая строка входного файла содержит число n. В следующей строке записаны числа hi (i = 1, 2, 3 ... n). Третью строчку состоит из n букв H или W указывающие куда смотрит соответствующее число.
Output format
Выходной файл должен содержать n чисел записанных в одной строке - ответ на задачу.


Пример в приложенном файле


Моё решение:
(знаю, что коряво, но на примере всё работает
но не понимаю что не так на деле
помогите пожалуйста)

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
f = open('input.txt', 'r')
data = f.read().split() #['9', '10', '15', '10', '15']
 
n = int(data.pop(0)) #5
a = data.pop(-1)
l = list(a) #['H', 'H', 'H', 'H', 'W']
i = 0
x = 0
 
rez = []
 
while i < n:
    if l[x] == 'H':
        if x == 0:
            rez.append('0')
        elif len(data[:x]) == 1:
            rez.append('1')
        else:
            hj = data[0]
            r = data[1:x]
            count = 1
            for item in r:
                if int(item) <= int(hj):
                    count += 1
            rez.append(str(count))
    if l[x] == 'W':
        if x == (n-1):
            rez.append('0')
        elif x == (n-2):
            rez.append('1')
        else:
            hj = data[-1]
            r = data[x+1:-1]
            count = 1
            for item in r:
                if int(item) <= int(hj):
                    count+=1
            rez.append(str(count))
    x += 1
    i += 1
rez = ' '.join(rez)
#print(rez)
f1 = open('output.txt', 'w')
f1.write(rez)
f.close()
f1.close()
Миниатюры
"Видимые числа"  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2020, 23:05
Ответы с готовыми решениями:

Видимые точки
Рассмотрим первый квадрат прямоугольной плоскости (x,y ≥ 0). Будем считать, что точка (x,y) с целыми значениями координат видима, если...

Скрыть не видимые по умолчанию
Доброго времени суток! Это для чего вообще не понятно?

Сдвинуть видимые элементы
добрый день! пытаюсь сделать фильтр,но когда я скрываю элемент,остальные остаются на своём месте и не сдвигаются код: &lt;input...

26
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.11.2020, 17:05
Лучший ответ Сообщение было отмечено RSk141 как решение

Решение

Студворк — интернет-сервис помощи студентам
Gdez, а я что насчитал? Разве не длину подпоследовательности?

Программа:

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
import sys
sys.stdin = open('input.txt', 'r')
n = int(input())
a = list(map(int, input().split()))
d = input()
sys.stdin.close()
ans = [0] * n
for i in range(n):
    s = 0
    if d[i] == 'H':
        for j in range(0, i):
            f = True
            for k in range(j + 1, i):
                if a[k] > a[j]:
                    f = False
                    break
            if f:
                s += 1
    else:
        for j in range(i + 1, n):
            f = True
            for k in range(i + 1, j):
                if a[k] > a[j]:
                    f = False
                    break
            if f:
                s += 1
    ans[i] = s
sys.stdout = open('output.txt', 'w')
print(*ans)
sys.stdout.close()
Ответ:

Code
1
0 1 1 1 6 5 3 3 4 4 5 2 6 6 0
1
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 17:06
RSk141, в коде файлы закрыл?
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 17:10  [ТС]
Gdez, да
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 17:14  [ТС]
КулХацкеръ, твой код сработал! 12 тестов из 25
Миниатюры
"Видимые числа"  
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.11.2020, 18:32
Лучший ответ Сообщение было отмечено RSk141 как решение

Решение

Ух, здорово! Хотя над скоростью работы алгоритма надо поработать...

Добавлено через 1 час 15 минут
Прикольная идейка пришла мне в голову - использовать стек для оптимизации. Потесть, жутко интересно, стоящая идея или хлам .

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
64
65
66
67
68
69
70
import sys
 
sys.stdin = open('input.txt', 'r')
n = int(input())
a = list(map(int, input().split()))
d = input()
sys.stdin.close()
 
ans = [0] * n
dynamicH = [0] * n
dynamicW = [0] * n
heights_stack = []
seq_len_stack = []
 
heights_stack.append(1111111111)
seq_len_stack.append(0)
heights_stack.append(a[0])
seq_len_stack.append(1)
dynamicH[0] = 1
 
for i in range(1, n):
    v = a[i]
    while v > heights_stack[-1]:
        heights_stack.pop()
        seq_len_stack.pop()
    if v < heights_stack[-1]:
        heights_stack.append(v)
        seq_len_stack.append(seq_len_stack[-1] + 1)
    else:
        seq_len_stack[-1] += 1
    dynamicH[i] = seq_len_stack[-1]
 
heights_stack.clear()
seq_len_stack.clear()
 
heights_stack.append(1111111111)
seq_len_stack.append(0)
heights_stack.append(a[-1])
seq_len_stack.append(1)
dynamicW[-1] = 1
 
for i in range(-2, -n - 1, -1):
    v = a[i]
    while v > heights_stack[-1]:
        heights_stack.pop()
        seq_len_stack.pop()
    if v < heights_stack[-1]:
        heights_stack.append(v)
        seq_len_stack.append(seq_len_stack[-1] + 1)
    else:
        seq_len_stack[-1] += 1
    dynamicW[i] = seq_len_stack[-1]
 
for i in range(n):
    if d[i] == 'H':
        if i > 0:
            ans[i] = dynamicH[i - 1]
        else:
            ans[i] = 0
    else:
        if i < n - 1:
            ans[i] = dynamicW[i + 1]
        else:
            ans[i] = 0
 
sys.stdout = open('output.txt', 'w')
#print(*dynamicH)
#print(*dynamicW)
print(*ans)
sys.stdout.close()
3
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 18:35  [ТС]
КулХацкеръ, есть!
спасибо огромное!
Миниатюры
"Видимые числа"  
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.11.2020, 18:36
Во). Если постараться, любую задачу можно решить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2020, 18:36
Помогаю со студенческими работами здесь

Окна, не видимые xsplit
Существует программа для стриминга (xsplit)- она захватывает экран. Так вот часть окон она не видит (к примеру notice этой же программы,...

Excel, только видимые ячейки
Добрый день. Подключаюсь к &quot;базе&quot; в формате листы экселя. Примерно так: string connectionString =...

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

Видимые элементы по значению Edit
Имеется форма c DBGrid в которую посредством компонентов добавляются записи. Необходимо, чтобы при вводе в Edit операции 140 появлялась...

Видимые/невидимые кнопки и отображение иконок
есть данный код, подскажите, как делать такое задание: 1)При помощи кнопок – переключателей (radiobutton) организовать отображение в поле...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru