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

Каналы на Марсе

15.03.2022, 19:34. Показов 695. Ответов 2

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане, несколько дней мучался над программой, сейчас она работает на на 0,015 секунды дольше чем должна, голова уже не варит от слова совсем, так что нужна помощь знающих людей, пожалуйста, прооптимизируйте мой горе код на сколько это возможно, я буду крайне Вам признателен

за ранее ОГРОМНОЕ СПАСИБО!

Один из районов поверхности Марса покрыт идеальной сеткой каналов. Они делят поверхность на одинаковые квадратные клетки (кривизной поверхности мы здесь пренебрегаем). Сам район представляет собой идеальный квадрат, каждая сторона которого разбита на N клеток.
Как показали исследования археологической экспедиции, покрытый каналами район Марса занимала древняя страна под названием Йатик. Жители Йатика выращивали специальный злак — сир — который составлял основу их метаболизма. Сир бывает двух сортов — крупно- и мелкозернистый. Собственно, закат империи Йатика начался после гражданской войны между любителями этих сортов. До последнего времени, однако, не было установлено, какая из партий победила в этой кровопролитной войне. Результаты последней экспедиции на Марс позволяют надеяться на разгадку этой исторической тайны. Ученым удалось установить, сир какого сорта был последним высеян в той или иной клетке Йатика. Поскольку, по стародавней традиции, сир высевали в последовательности клеток (параллельные сторонам света, или идущие под углом 45° к ним), можно предположить, что сторонники победившей партии делали наиболее длинные посевы.
Исходные данные
В первой строке входа содержится единственное число N — размер квадрата (1 ≤ N ≤ 1400). Затем следуют N строк, каждая из которых состоит ровно из N символов. Буква “s” в i-й строке и j-м столбце означает, что в соответствующей клетке квадрата последним был высеян мелкозернистый сир, буква “S” означает, что последним был высеян крупнозернистый сир. Можно считать, что жители данного района не выращивали ничего кроме сира, и в каждой клетке района был засеян сир одного из этих двух сортов.
Результат
В первую строку нужно записать символ “s”, если в кровопролитной войне победила партия любитетей мелкозернистого сира, и символ “S”, если крупнозернистого. Если победителя определить невозможно, то первая строка должна содержать единственный символ “?”. Во второй строке должно быть записано целое число — максимальная длина посева сира одного сорта.


мой код:

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
def tra(mat):
    tm = list()
    for i in range(len(mat)):
        tm.append(list(len(mat[i]) * '0'))
    for i in range(len(mat)):
        for j in range(len(mat)):
            tm[j][i] = mat[i][j]
    return tm
def scm(mat, lt):
    fug = list()
    for i in range(len(mat)):
        fg = list()
        arg = 1
        a = mat[i][0]
        for i1 in range(1, len(mat[i])):
            if mat[i][i1] == a:
                arg += 1
            else:
                fg.append([arg, a])
                arg = 1
                a = mat[i][i1]
        fg.append([arg, a])
        fg.sort()
        if len(fg) > 1:
            gh = fg[-1]
            for i in range(len(fg) - 2, -1, -1):
                if fg[i][0] == gh[0]:
                    if fg[i][1] == gh[1]:
                        pass
                    else:
                        fug.append([fg[i][0], "?"])
                        break
                else:
                    fug.append(fg[-1])
                    break
        else:
            fug.append(fg[0])
    if lt == 1:
        return fug
    elif lt == 0:
        fug.sort()
        gh = fug[-1]
        fg = list()
        f = False
        for i in range(len(fug) - 2, -1, -1):
            if fug[i][0] == gh[0]:
                if fug[i][1] == gh[1]:
                    pass
                else:
                    return [fug[i][0], "?"]
                    f = True
                    break
            else:
                return fug[-1]
                f = True
                break
        if not f:
            return fug[-1]
N = int(input())
POLE = []
ALL_0 = []
ALL_1 = []
ALL_2 = []
OTVET = []
for i in range(N):
    POLE.append(list(input())) # заполняем список POLE, который будет хранить все поле посевов, где в каждой ячейке хранится 
if N == 1:
    print(POLE[0][0])
    print(1)
else:            
    test = POLE
    max_col = len(test[0])
    max_row = len(test)
    cols = [[] for _ in range(max_col)]
    rows = [[] for _ in range(max_row)]
    fdiag = [[] for _ in range(max_row + max_col - 1)]
    bdiag = [[] for _ in range(len(fdiag))]
    min_bdiag = -max_row + 1
 
    for x in range(max_col):
        for y in range(max_row):
            cols[x].append(test[y][x])
            rows[y].append(test[y][x])
            fdiag[x+y].append(test[y][x])
            bdiag[x-y-min_bdiag].append(test[y][x])
    ALL_0.append(fdiag)
    ALL_0.append(bdiag)
    ALL_1 = [c for d in ALL_0 for c in d]
    for i in range (N):
        ALL_1.append(POLE[i])
    ALL_2 = (tra(POLE))
    for i in range (N):
        ALL_1.append(ALL_2[i])
    #print(ALL_1)
    #print(ALL_1)
    OTVET.append(scm(ALL_1,0))
    print (OTVET[0][1])
    print (OTVET[0][0])
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2022, 19:34
Ответы с готовыми решениями:

Каналы поменять левый и правый каналы аудио ?
Как поменять каналы правый на левый, в играх приходится постоянно поворачивать наушники а модель наушников неудобная наоборот.

Вода на Марсе
Сразу пара научных работ, результаты которых «поспели» на днях, заставила учёных всерьёз заговорить о существовании жидкой воды на...

Оценить ускорение свободного падения на Марсе
Здравствуйте дорогие форумчане. Хотел сделать себе недельный отдых, да вот не получилось, хотел просто ради себя пару задач с программы 7...

2
290 / 170 / 92
Регистрация: 21.03.2016
Сообщений: 400
15.03.2022, 19:51
Очень трудно читать ваш код. Лучше объясните что он делает или должен делать.
0
0 / 0 / 0
Регистрация: 15.09.2020
Сообщений: 41
15.03.2022, 19:58  [ТС]
Спасибо за ответ!
задача с Timus
https://acm.timus.ru/problem.aspx?space=1&num=1287
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2022, 19:58
Помогаю со студенческими работами здесь

Жизнь на Марсе - выдумка или реальность?
Голландская компания Mars One скоро начинает 10летний проект создания первого поселения на Марсе с безвозвратной отсылкой астронавтов,...

Ускорение свободного падения на Земле и Марсе
Федя может одновременно жонглировать четырьмя мячами. Каждый мяч находится в воздухе в течение одной секунды. а) С какой начальной...

Олимп - самая высокая гора на Марсе?
Олимп - это вулкан. Его высота от основания 21 км. Если учесть разреженную атмосферу Марса, то на вершине Олимпа будет чистый вакуум....

Проблемы с командой LD Rd, X+ решены, мешала погода на Марсе
Здравствуйте, товарищи! Третий день веду битву с чтением из оперативки. Задача проста - по команде с UART вывести в UART последовательно...

Верно ли, что притяжение на поверхности Меркурия такое же как на Марсе?
Вероятно речь идет не о точном равенстве, а о равенстве с небольшой погрешностью. В принципе чем меньше небесное тело, тем слабее оно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru