Код выдаёт на python неверный ответ

Рейтинг: 0Ответов: 1Опубликовано: 19.07.2023

решала следующую задачу:

Группа из n танцоров репетирует выступление на закрытии олимпиады.
Танцоры выстроены в ряд,
они выучили свои движения и не могут меняться местами. 
Для некоторых из них уже куплен 
белый танцевальный костюм, для некоторых уже куплен чёрный костюм, 
а с костюмами остальных руководитель ансамбля ещё не определился.

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

Руководитель знает, сколько бурлей стоит один чёрный костюм и 
сколько бурлей стоит один белый костюм. 
Вам требуется определить, возможно ли заказать оставшиеся костюмы 
таким образом, чтобы полученная последовательность цветов костюмов танцоров 
была палиндромом, и, если это возможно, 
то какое минимальное суммарное количество бурлей потребуется потратить?
Напомним, что танцоры не могу меняться местами, а также 
в силу бюрократических формальностей не разрешается заказывать 
новые костюмы для танцоров, чьи цвета на сцене уже определены, 
даже если это позволит получить ответ меньшей итоговой стоимости.

Но мой код на некоторых тестах выдаёт неверный ответ, помогите пожалуйтста, мой код:

n, w, b=map(int, input().split()) # 0=белый, 1=чёрный, 2=не выбран 
x=min(w, b)
if w>b:
    u=1
else:
    u=0
a=list(map(int, input().split()))
ans=0
for i in range(n//2+(n%2)):
    if a[i]==0:
        if a[n-i-1]==1:
            ans=-1 
            break
        elif a[n-i-1]==2:
            ans+=w 
            a[n-i-1]=0
    #
    elif a[i]==1:
        if a[n-i-1]==0:
            ans=-1 
            break
        elif a[n-i-1]==2:
            ans+=b 
            a[n-i-1]=1
    #
    elif a[i]==2:
        if a[n-i-1]==0:
            ans+=w 
            a[i]=0 
        elif a[n-i-1]==1:
            ans+=b 
            a[i]=1 
        elif a[n-i-1]==2:
            ans+=x
            a[i]=u 
            a[n-i-1]=u 
print(ans)

Ответы

▲ 1Принят

Проблема в том, что в последней ветви, когда у вас элемент и зеркальный элемент не определены, нужно потратиться на два костюма

ans+=2*x

за исключением случая, когда i == n-i-1

elif a[n-i-1]==2:
        c = x if i==n-i-1 else 2*x 
        ans+= c
        a[i]=u 
        a[n-i-1]=u #ну это ни на что не повлияет