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

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

20.11.2020, 23:05. Показов 3260. Ответов 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
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 07:44
RSk141, 1. При "просмотре" текущее число сравнивается с первым (последним) числом в исходном списке. Нужно проверять соседнее число (H - 3-е со 2-м, затем 2-е с 1-м; 1-е с 0-м и тд)
2. Если условие ( <=) не выполняется, то досрочный выход из цикла for и переход к следующему числу в спииске (к следующему H или W)
Посмотри
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']
x = 0
 
rez = []
 
while x < n:
    if l[x] == 'H':
        if x == 0:
            rez.append('0')
        elif len(data[:x]) == 1:
            rez.append('1')
        else:
            r = data[:x]
            count = 1
            for i in range(len(r) - 1, 0, -1) :
                if int(r[i]) <= int(r[i-1]):
                    count += 1
                else :
                    break
            rez.append(str(count))
    if l[x] == 'W':
        if x == (n-1):
            rez.append('0')
        elif x == (n-2):
            rez.append('1')
        else:
            r = data[x+1:]
            count = 1
            for i in range(len(r) - 2) :
                if int(r[i]) <= int(r[i+1]):
                    count+=1
                else :
                    break
            rez.append(str(count))
    x += 1
rez = ' '.join(rez)
#print(rez)
f1 = open('output.txt', 'w')
f1.write(rez)
f.close()
f1.close()
1
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 13:37  [ТС]
Gdez, к сожалению, данный вариант тоже не оказался верным
0/25 тестов
Миниатюры
"Видимые числа"  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 14:31
RSk141, такое часто бывает, если формат вводимых данных неверен. Полного условия задачи нет.
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 14:54  [ТС]
Gdez, скинул то условие, которое дали самому. Что имеется в виду по форматом вводимых данных?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 15:07
RSk141,
Что имеется в виду по форматом вводимых данных?
Обработка вводимых данных. Или формат вывода решения.
Ссылка на тестер есть?

Добавлено через 45 секунд
Или вариант, при котором решение неверно
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 15:51  [ТС]
Gdez, тестера дать не могу, т.к. доступ туда лишь через личную учётку, из примеров дали только один(тот, который приложил). Вывод считывает с output файла, так что думаю от того как обрабатываются вводимые данные здесь ничего не зависит.

Добавлено через 5 минут
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
with open("input.txt") as f:
    n = int(f.readline().strip())
    nums = list(map(int, f.readline().split()))
    directions = f.readline()
 
seen_nums = [0 for _ in nums]
 
up = lambda x: x+1
down = lambda x: x-1
 
for i in range(n):
    if directions[i] == 'H':
        change = down
    else:
        change = up
    prev = -1
    ind = change(i)
    while ind >= 0 and ind < n and prev < nums[ind]:
        prev = nums[ind]
        seen_nums[i] += 1
        ind = change(ind)
 
with open("output.txt", 'w') as f:
    f.write(" ".join(list(map(str, seen_nums))))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 16:12
RSk141, по идее должен быть хоть один (примитивный) тест верным...
Может написание файла?
Например, не output.txt, а OUTPUT.TXT
P.s. Тоже разные тесты пробовал...

Добавлено через 12 минут
RSk141, попробуй
15
1 2 3 2 3 1 3 3 2 3 1 2 3 2 3
HHHHWWHHHWHWHHW
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 16:22  [ТС]
Gdez, в общем две задачи
в первой(у меня в созданных темах есть) вывод проводил именно так и считывал данные(и формат тот же) таким же способом что и здесь
в результате 5 тестов из 10(я сам алгоритм не понял там, поэтому так)
а здесь вроде бы уже и понятно стало
но реализовать не получается

Добавлено через 10 минут
Gdez,
Цитата Сообщение от Gdez Посмотреть сообщение
попробуй
15
1 2 3 2 3 1 3 3 2 3 1 2 3 2 3
HHHHWWHHHWHWHHW
где попробовать?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 16:23
RSk141, у себя в коде нашел ошибку при обработке W
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
f = open('input.txt', 'r')
data = f.read().split() #['9', '10', '15', '10', '15']
 
n = int(data.pop(0)) #5
#print(*data)
a = data.pop(-1)
l = list(a) #['H', 'H', 'H', 'H', 'W']
x = 0
 
rez = []
 
while x < n:
    if l[x] == 'H':
        if x == 0:
            rez.append('0')
        elif len(data[:x]) == 1:
            rez.append('1')
        else:
            r = data[:x]
            count = 1
            for i in range(len(r) - 1, 0, -1) :
                if int(r[i]) <= int(r[i-1]):
                    count += 1
                else :
                    break
            rez.append(str(count))
    if l[x] == 'W':
        if x == (n-1):
            rez.append('0')
        elif x == (n-2):
            rez.append('1')
        else:
            r = data[x+1:]
            count = 1
            for i in range(len(r) - 1) :
                if int(r[i]) <= int(r[i+1]):
                    count+=1
                else :
                    break
                #print(x,i,count)
            rez.append(str(count))
    x += 1
rez = ' '.join(rez)
#print(rez)
f1 = open('output.txt', 'w')
f1.write(rez)
f.close()
f1.close()
Добавлено через 55 секунд
RSk141,
где попробовать?
В своем коде - неправильно считает
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 16:27  [ТС]
Gdez, 0 1 1 1 2 1 2 1 1 3 1 1 1 1 0
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 16:29  [ТС]
Gdez, (с исправлением)
Миниатюры
"Видимые числа"  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 16:41
RSk141,
Gdez, 0 1 1 1 2 1 2 1 1 3 1 1 1 1 0
Должно быть
0 1 1 1 3 2 2 1 2 3 1 1 1 1 0
В условии "...не больше" -> "<="

Добавлено через 7 минут
RSk141,
по идее должен быть хоть один (примитивный) тест верным...
В тестах, за очень редким исключением, первыми идут из условия задачи. Поэтому показалось странным, что ни один верный ответ
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.11.2020, 16:42
Gdez, у меня вообще:

0 1 1 1 6 ...

Для твоего теста.
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 16:42  [ТС]
Gdez, используя ваш код выше, вышел такой же результат
но при загрузке тестов правильных ответов нет
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.11.2020, 16:42
Наверное, задачу не понял я совсем.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 16:51
На олимпиадах часто, не зная вообще способа решения, "забивают" в код условие - "если" дальше входные данные из условия задачи, "то" дальше верный ответ из условия задачи. Таким образом получают хотя бы суперминимум баллов, не 0

Добавлено через 6 минут
КулХацкеръ, Задача - определение длины неубывающей подпоследовательности чисел слева от числа при L и справа от числа при W. В длину подпоследовательности не входит само число
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 17:02  [ТС]
Gdez, имеется в виду это?
Python
1
2
3
4
f = open('input.txt').read()
if f == '5\n9 10 15 10 15\nHHHHW':
    f1 = open('output.txt', 'w')
    f1.write('0 1 1 1 0')
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.11.2020, 17:03
RSk141, да
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 18
21.11.2020, 17:04  [ТС]
Gdez, ничего не дало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2020, 17:04
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник 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),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru