Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8211

競技プログラミングの鉄則でNim解説 A03 - Two Cards - nilSyntax

$
0
0

前回に続きNim解説となります。

競技プログラミングの鉄則 演習問題集 - AtCoder

A03 - Two Cards

atcoder.jp

今回は2つの配列から1つずつ値をとって、合計値kとなる値があるかの判定を行う問題です。 2重ループの問題ですね。

ソースコードの全文

import std/strutils
import std/sequtils

proca03() =
  let 
    line0 = stdin.readLine().split().mapIt(it.parseInt())
    n = line0[0]
    k = line0[1]
    ps = stdin.readLine().split()[0..<n].mapIt(it.parseInt())
    qs = stdin.readLine().split()[0..<n].mapIt(it.parseInt())

  var flg: bool = falsefor p in ps:
    for q in qs:
      if (p + q) == k:
        flg = truebreakif flg: echo"Yes"else: echo"No"
        
a03()

ソースコードの解説

  • ライブラリのインポートと標準入力からのデータ取り込みについては割愛。
  • A01とA02のブログ記事参照して下さい。

二重ループ

  • 本問題の肝は以下の二重ループ。
  • 判定したいのは合計値がkとなるpqの組み合わせがあるかだけですので、存在確認したらbreakします。
var flg: bool = falsefor p in ps:
  for q in qs:
    if (p + q) == k:
      flg = truebreak
  • flgというブール変数を初期化します。
  • psの各要素pqsの各要素qのペアを全てチェックし、その和がkに等しいかどうかを確認します。
  • 和がkに等しいペアが見つかるとflgtrueに設定し、内側のループを抜けます。

結果の出力

if flg: echo"Yes"else: echo"No"
  • flgtrueなら"Yes"を出力し、falseなら"No"を出力します。

  • flgtrueの場合は "Yes" を出力し、falseの場合は "No" を出力します。

プロシージャの呼び出し

a03()
  • a03プロシージャを呼び出して実行します。

プログラムの動作

  1. 最初に標準入力から1行読み取り、空白で区切られた2つの整数nkを取得します。
  2. 次に、n個の整数のリストpsqsを標準入力から読み取ります。
  3. psの各要素とqsの各要素のペアを調べ、その和がkと等しいペアが存在するかをチェックします。
  4. 和がkとなるペアが見つかれば"Yes", 見つからなければ"No"を出力します。

Viewing all articles
Browse latest Browse all 8211

Trending Articles