#方針
1.各桁の「箱」をリスト型として辞書の値に空の状態から生成。
2.とりあえず入力から値をリストにappendする。
3.重複を剥ぎ取ってもなおリストに複数値が埋め込まれている場合、この時点で-1を出力
4.3でない場合、出来上がった辞書になお空リストが存在する場合、'0'を入れてあげることで最小値を与えるようにする。
5.'0'という一桁の文字列という例外を除いて、'007'などという文字列はstr(int())とすることで桁数が変わることから、ansがこの条件に合うものであれば-1を出力
6.それ以外の場合、int(ans)を出力
#コード
Python
1N, M = map(int, input().split()) 2 3num_dic = {} 4for i in range(1, N + 1): 5 num_dic[i] = [] 6 7for _ in range(M): 8 s, c = map(int, input().split()) 9 num_dic[s].append(str(c)) 10 11if any(len(list(set(num_dic[i]))) >= 2 for i in range(1, N + 1)): 12 13 print(-1) 14 15else: 16 17 ans = '' 18 for i in range(1, N + 1): 19 if len(num_dic[i]) == 0: 20 num_dic[i].append('0') 21 22 num_dic[i] = list(set(num_dic[i])) 23 24 ans += num_dic[i][0] 25 26 27 if len(str(int(ans))) != len(ans) and ans != '0': 28 print(-1) 29 30 else: 31 print(int(ans))
#質問
本来であれば、Nの制約が非常に小さいことから全探索を行うところなのですが、先にNという数の各桁に何を埋め込むかという戦法を取りました。いくつかの情報を検索して集めたところ、このやり方はどうやら0の扱いなどで穴が空きやすいとのことでしたが、上記のエラーコードで言うとどういったところが抜け目になってしまっているのでしょうか。またあるとしたらどのような入力の反例がありますでしょうか。雑な質問とはなってしまいましたが、お力添え頂ける箇所がございましたら、ご教授のほどどうかよろしくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/06 09:32