В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
dppfpffpfp
dppfpffpfp
04.01.2021 04:54 •  Информатика

с такой задачей. Третий день бьюсь. Собрать многоугольник

Имя входного файла: стандартный ввод

Имя выходного файла: стандартный вывод

Ограничение по времени: 2 секунды

Ограничение по памяти: 512 мебибайт

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

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

Формат входных данных

В первой строке дано целое число n — количество палок (3 <= n <= 10^5). Во второй строке даны n целых чисел a1, a2, . . . , an, разделённые пробелами — длины палок (1 <= ai <= 10^9).

Формат выходных данных

Выведите наименьшее количество сторон в строго выпуклом многоугольнике, который можно составить из имеющихся палок. Ecли составить строго выпуклый многоугольник невозможно, выведите «-1» (без кавычек).

Система оценки

Тесты к этой задаче состоят из трёх групп. за каждую группу ставятся только при прохождении всех тестов, подходящих под ограничения этой группы. Во всех тестах первой группы 3 <= n <= 4. За прохождение первой группы можно получить

В тестах второй группы 3 <= n <= 15. За вторую группу можно получить ещё На тесты третьей группы не накладывается никаких дополнительных ограничений, то есть в ней 3 <= n <= 10^5. За неё можно получить оставшиеся

Примеры

стандартный ввод стандартный вывод

4. . . . . . . . . . . . . . . . 4

1 2 4 6

4. . . . . . . . . . . . . . . . -1

7 4 1 2

4. . . . . . . . . . . . . . . . 3

4 2 5 1

3. . . . . . . . . . . . . . . . -1

1 2 1

4. . . . . . . . . . . . . . . . 3

1 1 1 100

Пояснения к примерам

В первом примере строго выпуклый многоугольник можно составить, только если использовать все имеющиеся палки.

Во втором примере строго выпуклый многоугольник составить невозможно. В третьем примере можно составить строго выпуклый многоугольник из всех четырёх палок, но он не наименьший, так как из палок с длинами 4, 2 и 5 можно составить невырожденный треугольник. Поэтому ответ для третьего примера равен 3.

В четвёртом примере всего три палки, и они не образуют невырожденный треугольник, поэтому ответ равен -1. В пятом примере нельзя построить строго выпуклый многоугольник из всех четырёх палок, но можно из трёх палок длины 1, поэтому ответ равен 3.

Вот моё решение:

n=int(input())
m=sorted(input().split())
b=0
b2=0
c=0
d=0
q1=1
q2=1
p=[]
for i in range (0, n-1):
b += int(m[i])
b2+= 1
for i in range(0,len(m)-1):
p.append(m[i])
if int(max(m))>=b and b2<=n-1:
p=[]
p.extend(m)
b=-1
print(b)
if q1==1 and (b!=-1 or b2>2):
while c<=int(max(p)):
c+=int(m[d])
d+=1
q1+=1
if q2==1 and (b!=-1 or b2>2):
c=0
if len(p)
d=2
else:
d=1
while c<=int(max(m)):
c+=int(m[-d])
d+=1
q2+=1
if q1n-1):
print(q1)
elif q1>=q2 and (b!=-1 or b2>n-1):
print(q2)
print(q1, q2, m, c, b2, b, p)
(последняя строка нужна для того, чтобы видеть, как изменяются переменные, в решении она не участвует)

По какой-то причине у меня то 4. . . 1 2 4 7 выдаёт 3 вместо -1, то 4. . . 1 1 1 100 пишет -1 вместо 3. (Указанный выше вариант - это второй случай) Проблема в том, что у меня неправильный ответ пишется либо когда b равен наибольшему элементу, либо когда b меньше него (это зависит от варианта, собственно поэтому там есть p, но он не используется)

Пояснения:

n - даётся по условию, кол-во палок

m - даётся по условию, длины палок, поступает отсортированным по увеличению для удобства

b - от его состояния зависит, будет выведен -1 или решение пойдёт дальше

b2 - нужен, чтобы расчёт q1 и q2 нормально считались, я пробовал без b2, получался бред полный

с - нужен для расчёта ответа, после расчёта q1 переходит в изначальное состояние

d - нужен для расчёта с, означает индекс прибавляемого элемента

q1 и q2 - два варианта ответа, q1 считается с начала списка, q2 с конца, в ответ идёт меньший из них

p - дополнительный список (тот же m, только без самого большого элемента)

Показать ответ
Ответ:
Эммикэт
Эммикэт
21.02.2022 05:54

все работает нормально

Объяснение:

ты тут код без отступов дал, мб там что-то не так. внизу код с отступами, который я тестил .

если тебе не нравится что выводит на 1 меньше: нумерация массива не с 1 начинается, а с 0. просто добавляй а res (индекс + 1)

Код:

n, m = map(int, input().split())

a= [list(map(int, input().split())) for i in range(n)]

print(a)

k = int(input())

count = 0

res=[]

for i in a:

   for j in range(len(i)):

       if i[j] == 0:

           count += 1

   if count == k:

       res.append( a.index(i))

       break

   else:

       count = 0

if len(res) == 0:

   print(count)

else:

   print(min(res))

ps: лучше так сделай

k = int(input())

line = 0

for i in a:

   count = 0

   for j in range(len(i)):

       if i[j] == 0:

           count += 1

   if count >= k:

       line = a.index(i) + 1

       break

print(line)


Короче, кодим. Двумерный массив и его размеры даны. легенда: кинотеатр, каждый элемент-место, если е
0,0(0 оценок)
Ответ:
DashaT141
DashaT141
21.02.2022 05:54

from os import system

from random import randint

answ = 'да'

answers = ['камень', 'ножницы', 'бумага']

while answ == 'да':

   system("cls")

   bot_balls = 0

   person_balls = 0

   while bot_balls < 3 and person_balls < 3:

       

       person = str(input("\nВаш вариант: "))

       

       bot = answers[randint(0, 2)]

       print("Я выбрал:", bot)

       if person == bot:

           print("Ничья")

       elif (person == answers[0] and bot == answers[1]) or (person == answers[1] and bot == answers[2]) or (person == answers[2] and bot == answers[1]):

           print("Вы победили!")

           person_balls += 1

       elif (person == answers[0] and bot == answers[2]) or (person == answers[1] and bot == answers[0]) or (person == answers[2] and bot == answers[1]):

           print("Вы проиграли!")

           bot_balls += 1

       print("Счет:", person_balls, ":", bot_balls)

   

   answ = str(input("\nХотите продолжить?: "))

system("cls")

print(" за игру!")

if person_balls > bot_balls:

   print("Вы победили со счетом:", person_balls, ":", bot_balls)

else:

   print("Вы проигради со счетом:", person_balls, ":", bot_balls)

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота