A - Who Ate the Cake? Editorial by en_translator
For beginners
- If you are new to learning programming and do not know where to start, please try Problem A "Welcome to AtCoder" from practice contest. There you can find a sample code for each language.
- Also, if you are not familiar with problems in programming contests, we recommend you to try some problems in "AtCoder Beginners Selection".
- 「C++入門 AtCoder Programming Guide for beginners (APG4b)」 is a C++ tutorial for competitive programmers. Sadly, this is only in Japanese too.
- 「Python入門 AtCoder Programming Guide for beginners (APG4bPython)」 is a Python tutorial for competitive programmers. Again, this is only in Japanese.
If \(A=B\), then we cannot determine which of the other two is the culprit, so the answer is -1
.
If \(A\neq B\), it is sufficient to print the one of \(1,2,3\) that is not \(A\) nor \(B\). There are \(3\times 2=6\) possible inputs that satisfy \(A\neq B\), so one can solve the problem by checking six conditions.
A, B = map(int, input().split())
if A == B:
print(-1)
if A == 1 and B == 2:
print(3)
if A == 1 and B == 3:
print(2)
if A == 2 and B == 1:
print(3)
if A == 2 and B == 3:
print(1)
if A == 3 and B == 1:
print(2)
if A == 3 and B == 2:
print(1)
Also, if we denote the culprit by \(C\), then one can use the following properties of \(A,B,C\) to reduce the conditional branch.
- \(C=6-A-B\)
- \(C=A\oplus B\) (\(\oplus\) is the exclusive logical sum)
A, B = map(int, input().split())
if A == B:
print(-1)
else:
print(6 - A - B)
A, B = map(int, input().split())
if A == B:
print(-1)
else:
print(A ^ B)
Also, one can use a language feature to reduce conditional branch.
A, B = map(int, input().split())
S = set([1, 2, 3])
S.discard(A) # Remove A from S if present, or do nothing if absent
S.discard(B) # Remove B from S if present, or do nothing if absent
if len(S) == 1:
print(S.pop())
else:
print(-1)
posted:
last update: