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

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

20.11.2020, 23:05. Показов 3246. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru