質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1276閲覧

Atcoder(ABC173-C)の問題で実行エラーになってしまう理由がわかりません

nontan_1993

総合スコア1

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/11 06:37

前提・実現したいこと

Atcoder(ABC173-C)が実行時エラー(RE)になってしまいます。
https://atcoder.jp/contests/abc173/tasks

.を0、#を1にするように置き換えて、H×Wの行列を作りました。
縦と横を消すという処理をH×W行列の前後にH×HとW×W行列をかけることによって表現することを考えました。
H×HとW×W行列は0と1の組合せが記述されている対角行列です。
計算後の行列の1の個数を数えることによって答えを出力します。

どなたか、実行時エラーになってしまう理由を知りたいです。よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Python

1import numpy as np 2import itertools 3 4H, W, K = list(map(int, input().split())) 5c = [input().split() for l in range(H)] 6b=[] 7d=[] 8for m in range(len(c)): 9 for item in c[m]: 10 item_mod = item.replace("." , "0") 11 item_mod = item_mod.replace("#" , "1") 12 b.append(item_mod) 13 d.append(b) 14 b=[] 15 16C_arr = np.array(d , dtype = "int") 17 18In = np.array(list(itertools.product([0,1] , repeat=H))) 19Out = np.array(list(itertools.product([0,1] , repeat=W))) 20 21ans = 0 22for i in range(2**H): 23 for j in range(2**W): 24 In_matrix = np.diag(In[i]) 25 Out_matrix = np.diag(Out[j]) 26 27 In_C = np.dot(In_matrix , C_arr) 28 In_C_Out = np.dot(In_C , Out_matrix) 29 30 ICO = In_C_Out.flatten() 31 ICO = ICO.tolist() 32 33 if ICO.count(1) == K: 34 ans += 1 35 36print(ans)

試したこと

入力例を一通り試したところ、うまくいきました。
atcoderでも数問は正解になりました

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/07/11 07:44

質問コードをそのままAtcoderに提出しましたが、全問不正解でした。 実際に実行したコードと質問に記載しているコードに相違がないか確認ください。
nontan_1993

2020/07/11 08:54

理由は全く分からないのですが、 Python(3.82)にするとb05とb14がACで、それ以外がREになります PyPy2,3だと全問REになるようです。
can110

2020/07/11 09:10

> 入力例を一通り試したところ、うまくいきました。 とありますが、問題文に記載されている4つの例はうまくいったということでしょうか? こちらのローカルマシン環境(Python3.7)ではランタイムエラーが発生しますが。
nontan_1993

2020/07/11 09:24

これが正しいやり方なのかは分からないのですが、 入力例4 H,W,K = 6,6,8 c=[[".",".","#","#",".","."],[".","#",".",".","#","."],["#",".",".",".",".","#"],["#","#","#","#","#","#"],["#",".",".",".",".","#"],["#",".",".",".",".","#"]] を入れて動かすと、答え208が出ます。 これらの作業をそれぞれ行ったら、答えが一致したという意味で記入しました。
can110

2020/07/11 09:29

なるほど。了解です。
guest

回答1

0

ベストアンサー

C_arr = np.array(d , dtype = "int")の後に以下のコードを追加してローカル環境で例題を実行してみてください。

Python

1print(C_arr) 2print(C_arr.shape)

おそらく意図した配列にはなっていないと思います。
原因は入力文字列から配列作成の部分のコードに問題があるからです。
適切に修正すれば通ります。

投稿2020/07/11 09:33

編集2020/07/11 09:34
can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nontan_1993

2020/07/11 09:51

初心者質問で申し訳ないのですが、 H,W,K = 2,3,4 c=[[".",".","#"],["#","#","#"]] を入れると print(C_arr) [[0 0 1] [1 1 1]] print(C_arr.shape) (2, 3) となり、結局、欲しい2×3(H×W)の行列になっているので、何が問題なのかが分からないのですが...
can110

2020/07/11 10:08

AtCoderでは問題は標準入力から文字列として与えられます。 すなわちこの文字列から「c=[[".",".","#"],["#","#","#"]]」を作りだす処理が必要なわけですが その処理に問題があるのでREとなっているということです。
nontan_1993

2020/07/11 10:28

分かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問