Решите новогоднюю проблему хаоса в Python эффективным способом - PullRequest
0 голосов
/ 13 апреля 2019

Это Новый год, и все в очереди на катание на американских горках! Есть несколько человек, стоящих в очереди, и каждый человек носит наклейку, указывающую их начальную позицию в очереди. Начальные позиции увеличиваются на 1 с 1 в передней части строки до n в задней части.

Любой человек в очереди может подкупить человека прямо перед собой, чтобы поменяться местами. Если два человека меняются местами, они все равно носят одну и ту же наклейку, обозначающую их первоначальные места в очереди. Один человек может подкупить не более двух других. Например, если n = 8 и Person 5 подкупит Person 4, очередь будет выглядеть следующим образом: 1,2,3,5,4,6,7,8

Выведите целое число, обозначающее минимальное количество взяток, необходимое для перевода очереди в конечное состояние. Печать Слишком хаотично, если государство недействительно, т. Е. Требуется, чтобы человек подкупил более 2 человек

Я попробовал следующий код, но время ожидания увеличилось в более крупных тестах

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the minimumBribes function below.
def minimumBribes(Q):
    bribe=0



    for _ in range(len(q)):
        max_index = q.index(max(q))

        q_len = len(q)
        if max_index + 3 < q_len:
            return("Too chaotic")

        if max_index + 2 < q_len:
            bribe += 2
            del q[max_index]
        elif max_index + 1 < q_len:
            bribe += 1
            del q[max_index]

        elif max_index == q_len - 1:
            del q[max_index]

    return(bribe)

if __name__ == '__main__':
    t = int(input())

    for t_itr in range(t):
        n = int(input())

        q = list(map(int, input().rstrip().split()))

        print( minimumBribes(q))
sample input:
2
5
2 1 5 3 4
5
2 5 1 3 4

sample output: 
3
Too chaotic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...