Не в состоянии дать обосновать вывод в python - PullRequest
0 голосов
/ 05 апреля 2020

В одной из проблем для Code Jam 2020 я получаю вывод ниже

Case #1:    CJC
Case #2: IMPOSSIBLE
Case #3:      CJJCC
Case #4:   CC

Между тем реальный вывод должен был быть таким:

Case #1: CJC
Case #2: IMPOSSIBLE
Case #3: JCCJJ
Case #4: CC

Может кто-нибудь скажите как это исправить? Я использую python 3. Мой оператор печати выглядит следующим образом: print('Case #{}: {}'.format(count, output))

Ниже приведен мой код.

def checkOverlap(task1,task2):
start1 = int(task1[0])
start2 = int(task2[0])
end1 = int(task1[1])
end2 = int(task2[1])

if(end2 > start1 and start2 < end1):
    return True
else:
    return False


T= input()
test = int(T)
countTest = 0
while(countTest<test):
    A = input()
    countA = int(A)
    lim = 0
    activity = []
    while(lim<countA):
        activity.append(input().split(" "))
        lim += 1

    flag = True
    output=' '*countA
    output+='C'
    J=[]
    C=[activity[0]]

   impossible = False
   for i in range(0,countA-1):
       for j in range(i+1,countA):
           if (C.__contains__(activity[i]) and J.__contains__(activity[j])) or \
               (J.__contains__(activity[i]) and C.__contains__(activity[j])):
               continue

           check = checkOverlap(activity[i],activity[j])
           if(check == False):
               if C.__contains__(activity[i]):
                   if not C.__contains__(activity[j]):
                       C.append(activity[j])
               else:
                   if not J.__contains__(activity[j]):
                       J.append(activity[j])
           else:
               if (C.__contains__(activity[i])):
                   if(C.__contains__(activity[j])):
                    impossible = True
                   else:
                       if not J.__contains__(activity[j]):
                           J.append(activity[j])
               else:
                   if J.__contains__(activity[j]):
                       impossible = True
                   else:
                       if not C.__contains__(activity[j]):
                           C.append(activity[j])

   if impossible == True:

       output = 'IMPOSSIBLE'


   else:
       for i in range(1,countA):
           if C.__contains__(activity[i]):
               output += 'C'
           else:
               output += 'J'
   count = (countTest + 1)
   print('Case #{}: {}'.format(count, output))



   countTest += 1

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Почему эта строка в вашем коде?

    output=' '*countA

Если вы избавитесь от нее (перейдя, скажем, на output = ""), вы станете счастливее. То, что вы делаете, это запускает строку с кучей пробелов, которые потом печатаются. (Все остальное, что вы добавили, будет добавлено, так что ваша последняя строка будет " CJJCC".) Это портит выравнивание, которое вы хотели.

0 голосов
/ 05 апреля 2020

У вас есть output=' '*countA в начале, а в CJC и аналогичных случаях вы делаете только output += 'C' и output += 'J', поэтому вы найдете countA пробелов в начале этой строки

...