CSES - Aalto Competitive Programming 2024 - wk2 - Mon - Results
Submission details
Task:Building Teams
Sender:clovis
Submission time:2024-09-09 17:19:48 +0300
Language:Python3 (CPython3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.02 sdetails
#2ACCEPTED0.02 sdetails
#3ACCEPTED0.02 sdetails
#4ACCEPTED0.02 sdetails
#5ACCEPTED0.02 sdetails
#6--details
#7--details
#8--details
#9--details
#10--details
#11ACCEPTED0.02 sdetails
#12ACCEPTED0.02 sdetails

Code

import sys
# print(sys.getrecursionlimit())
sys.setrecursionlimit(10**5)

inp1 = input().split()
numPupils = int(inp1[0])
numFriendships = int(inp1[1])

friendshipList = []

def whetherValid(group1, group2):
  group1Set = set(group1)
  group2Set = set(group2)
  for friendship in friendshipList:
    if friendship[0] in group1Set and friendship[1] in group1Set:
      return False
    if friendship[0] in group2Set and friendship[1] in group2Set:
      return False
    
  return True

def get_combinations(index, group1, group2):
  # base case
  # if index reaches total number of pupils, then no more pupils to sort. Check if both group1 and group2 are valid. If yes then print out
  if possibleGroup != []:
    return
  if index == numPupils + 1:
    if whetherValid(group1, group2):
      # print("group1:", group1)
      # print("group2:", group2)
      possibleGroup.append(group1)
      possibleGroup.append(group2)

      whetherPossible[0] = True
    return
    
  # print(f"index: {index}, group1: {group1}, group2: {group2}")

  # reduction step
  # 2 choices
  # 1. don't add the pupil to group1, add to group2 and increment index
  # 2. add the pupil to group1, don't add to group2, increment index
  get_combinations(index + 1, group1, group2 + [index])
  get_combinations(index + 1, group1 + [index], group2)

if numPupils == 1:
  print("1")
else:
  for i in range(numFriendships):
    inp2 = input().split()
    friendshipList.append([int(inp2[0]), int(inp2[1])])

  whetherPossible = [False]
  possibleGroup = []

  get_combinations(1, [], [])
  if whetherPossible[0]:
    group1 = possibleGroup[0]
    group2 = possibleGroup[1]
    solution = ""

    for i in range(1, numPupils + 1):
      group1Set = set(group1)
      if i in group1Set:
        solution += "1 "
      else:
        solution += "2 "

    print(solution[:-1])

  else:
    print("IMPOSSIBLE")

Test details

Test 1

Verdict: ACCEPTED

input
10 20
3 4
8 10
3 7
1 8
...

correct output
1 1 1 2 2 1 2 2 2 1 

user output
2 2 2 1 1 2 1 1 1 2

Test 2

Verdict: ACCEPTED

input
10 20
1 3
8 10
2 4
6 8
...

correct output
1 1 2 2 1 1 1 2 1 1 

user output
2 2 1 1 2 2 2 1 2 2

Test 3

Verdict: ACCEPTED

input
10 20
7 10
3 10
9 10
2 10
...

correct output
1 2 2 1 1 1 2 1 2 1 

user output
2 1 1 2 2 2 1 2 1 2

Test 4

Verdict: ACCEPTED

input
10 20
2 4
2 10
7 10
4 6
...

correct output
1 2 1 1 2 2 2 1 2 1 

user output
2 1 2 2 1 1 1 2 1 2

Test 5

Verdict: ACCEPTED

input
10 20
3 5
8 10
9 10
1 8
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Verdict:

input
100000 200000
47355 96505
90709 92058
735 80715
91802 94265
...

correct output
1 2 2 1 2 1 1 1 2 2 1 2 1 1 1 ...

user output
(empty)

Test 7

Verdict:

input
100000 200000
59991 95794
95150 96051
78453 94730
90411 95523
...

correct output
1 1 1 2 2 1 1 2 1 2 1 2 2 2 1 ...

user output
(empty)

Test 8

Verdict:

input
100000 200000
89827 96402
65137 86792
80965 94708
19479 48078
...

correct output
1 2 1 1 2 1 2 2 2 1 2 1 1 2 1 ...

user output
(empty)

Test 9

Verdict:

input
100000 200000
72952 83723
66197 70052
2949 52160
55753 95651
...

correct output
1 1 2 2 2 1 1 2 2 2 2 2 1 2 1 ...

user output
(empty)

Test 10

Verdict:

input
100000 200000
38942 96755
70049 82663
7746 72732
87819 99029
...

correct output
IMPOSSIBLE

user output
(empty)

Test 11

Verdict: ACCEPTED

input
5 4
1 2
3 4
4 5
5 3

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 12

Verdict: ACCEPTED

input
4 5
1 2
1 4
2 3
2 4
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE