前提・実現したいこと
プログラミングコンテストの問題文の読解力を身に付けたい、その方法を教えてほしい。
発生している問題
プログラミングコンテストの問題文を理解することができません。
具体的な例としては、
以下ページに記載の辞書順比較で s<tを満たす要件の文章の意味が分かりません。
https://atcoder.jp/contests/abc042/tasks/abc042_b
(記法が特殊で、適切な書き換え方法が分からないな為、ページ先参照とさせていただきます。)
補足情報
35歳ながら、プログラムを本格的に勉強しようと奮起しています。
例に出した問題では、私はc言語で学んでいるのでstrcmpを利用した比較でおそらく、問題はクリアできると思うのですが、そうではなく、私はこういった問題文を読み解く、読解力を身に付ける方法を知りたいです。
なにか参考になるサイトや資料、書籍などはありますでしょうか?
恥ずかしながら、学生時代に真面目に勉強してこなかったので、
なにか前提知識が不足しているのではないかと思っております。
ご指導いただければ大変幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
確かに読みにくいですが、同じ記号は必ず同じもの、違う記号は必ず違うものを指すものとして、よく読む以外無いのではないでしょうか。
まず s = s1 s2 s3 ... sn ですが、n 個の文字列を組み合わせた文字列を表します。
いろはちゃんが持っているのは S1, S2, S3, ... SN ですが、この S と s、また N と n は大文字小文字が違うので違うものを意味します。
N 個の文字列の中から n 個選び、任意の順番で並べたものが s = s1 s2 s3 ... sn になります。
同様に、m 個選び、任意の順番で並べたものが t = t1 t2 t3 ... tm です。
これの大小の定義が問題の箇所ですね。
ある整数 i(1≦i≦min(n,m)) に関して、1≦j<i を満たす任意の整数 j において sj=tj が成し、かつ si<ti が成立する。
まず、カッコ内は読み飛ばしましょう。ある整数 i に関しての記述ということがわかります。
それからカッコ内を読みます。1≦i≦min(n,m) とあります。
これは i の取りうる値の範囲を示しています。
i は 1 以上 min(n,m) 以下の範囲を取ります。
min は引数のうち小さい方を返す関数ですね。よく出る表現なので、覚えてください。
n と m は既に出てきました。s の桁数が n 桁で、t の桁数が m 桁です。
つまり、s と t の桁数のうち、i は小さい方以下の数であることがわかります。
次の条件より、j もやはり桁数ですが、1 以上 i 未満であることがわかります。これはインデックスですね。i, j, k は配列のインデックスを表すのによく使われます。
i 未満の任意の整数 j において sj=tj が成立するというところより、文字列を順番に前から比較していき、i 桁より前ではすべて一致すると書いています。
そして si<ti なので、i 桁目では s の方が t より小さくなるという意味になります。
これを普通の日本語で読むと、「頭から読んでいき、初めて違う文字列が出てきたとき、それを比較して小さい方の文字列が含まれる方が小さい」となります。
次の条件も同様に読んでください。それぞれの記号が何を表しているかを注意深く覚えながら読むのが大事です。
投稿2020/04/19 07:38
編集2020/04/19 07:43総合スコア28669
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/19 12:35 編集
2020/04/19 12:33
2020/04/19 13:20
2020/04/19 13:22
2020/04/19 13:41
0
大丈夫!俺もこの問題は理解できませんw
結構ひどい問題だと思いますよ。
以下、読んだときの私の理解度です。
それらの文字列を好きな順番で全て結合してできる文字列のうち、もっとも辞書順で小さいものを求めてください。
「小さい???」よし。一般的な辞書順じゃなくて、正しく「辞書式順序」として理解しろってことね。わかった!
なお、ある文字列 s=s1s2s3
...sn と t=t1t2t3...tm について、以下のどちらかを満たすとき、辞書順比較で s<t であるといいます。
・ある整数 i(1≦i≦min(n,m)) に関して、 1≦j<i を満たす任意の整数 j において sj=tj が成立し、かつ si<ti が成立する。
・任意の整数 i(1≦i≦min(n,m))に関して si=ti が成立し、かつ n<m が成立する。
ん??これだと「ab」と「ba」の順番つけられなくない??
そもそも si<ti の比較って、どうやって定義されてるんだ???
意味がわからん。とりあえず、普通の辞書順でソートするコードを適当に書いてみて、テスト通してみよう!
競技だったらこういったものは決め打ちしていくしかないので、繰り返し似たような問題解いて、自身の中のサンプル増やすしか無い気がします。
投稿2020/04/19 12:51
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/19 12:53
2020/04/19 13:05
退会済みユーザー
2020/04/19 13:13
2020/04/19 13:44
0
とにかくコードを書いて動かして、というのを繰り返し、経験を積むしかないです
ろくに言語の文法も覚えてない状態で読解力ってのは付くはずもないので、文法を身に染み付かせるしかないです
#覚えてる、だけじゃダメダメ
投稿2020/04/19 06:40
総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/19 07:04
2020/04/19 07:15
2020/04/19 07:34 編集
2020/04/19 07:27
2020/04/19 09:14 編集
2020/04/19 07:56
2020/04/19 08:27 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/19 07:56
2020/04/19 08:00
2020/04/19 09:34
2020/04/19 09:37
2020/04/19 09:39
2020/04/19 09:43
2020/04/19 09:54 編集
2020/04/19 11:51
2020/04/19 12:24
2020/04/19 12:36