ABC157C Guess The Number

問題

https://atcoder.jp/contests/abc157/tasks/abc157_c

方針

整数が存在しないNGケースは以下の二つの場合である。

  • 矛盾する条件が存在する
  • 1桁目に0が指定されている

NGの場合、入力を全て受け付けた後に-1を出力する。

並行して、各桁の条件を記録しておく。

  • 記録があれば、その通り出力する
  • 記録がない場合は
    • 1桁目であれば1を出力する
    • それ以外は0を出力する

ポイント

  • NGケースのフラグ付け
  • 条件の記録
    を一つのループの中で並行して行なっている。

コード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
N, M = map(int, input().split())
cand = ['*'] * N # 候補を記憶しておくリスト
mn = '' # 最小値、およびNGフラグ
for m in range(M):
s, c = map(int, input().split())
if s==1 and c==0 and N > 1: # NG:1桁目に0が指定されている。ただしN=1ならセーフ。
mn = '-1'
if cand[s-1] == '*' or cand[s-1] == str(c):
cand[s-1] = str(c)
else: # NG:矛盾する条件が存在する
mn = '-1'

if mn == '-1': # NGのフラグが立っているので-1を出力
print (mn)
exit()

for i in range(N):
if cand[i]=='*': # 記録がない場合
if i==0 and N > 1::
mn+='1' # 1桁目であれば1。ただしN=1は例外。
else:
mn+='0' # それ以外は0
else:
mn+=cand[i] # 記録があれば、条件通り出力
print (mn)