Python
 Computer >> コンピューター >  >> プログラミング >> Python

競技プログラミングのためのPython入力メソッド?


ここでは、Pythonでの競技プログラミングのためのI/Oメソッドのさまざまな方法を見ていきます。競技プログラミングでは、他の人よりも有利になるように、入力をできるだけ速く読み取ることが重要です。

あなたがコードフォースまたは同様のオンラインジュード(SPOJなど)にいて、番号a、b、c、dを読んで、それらの製品を印刷する必要があるとします。行うには複数の方法があります。それらを1つずつ調べてみましょう

これを行う1つの方法は、リスト内包表記とマップ機能のいずれかを使用することです。

方法1 :リスト内包表記の使用

a, b, c, d = [int(x) for x in input().split()]
print(a*b*c*d)

方法2 :マップ機能を使用する

a, b, c, d = map(int, input().split())
print(a*b*c*d)

上記の問題を実行する別の方法は、はるかに高速なstdinとstdoutを使用することです。

方法1 :stdinとstdoutを使用したリスト内包表記

from sys import stdin, stdout
a, b, c, d = [int(x) for x in stdin.readline().rstrip().split()]
stdout.write(str(a*b*c*d) + "\n")

問題について入力メソッドと出力メソッドをテストできる、競技プログラミングの別の問題を見てみましょう。この問題は、INTEST-SPOJでの膨大な入力テストと呼ばれます。

入力

入力は、2つの正の整数n k(n、k <=10 7 )で始まります。 )。入力の次のn行には、10 9 以下の1つの正の整数tiが含まれています。 、それぞれ。

出力

tiがkで割り切れる整数の数を示す単一の整数を出力に書き込みます。

場所

  • 入力 :入力は、2つの正の整数nおよびkで始まります(ここで、n、k <=10)。次の入力行には、それぞれ10*9以下の正の整数tが1つ含まれています。

  • 出力 :tがkで割り切れる整数の数を示す単一の整数。

Input
7 3
1
51
966369
7
9
999996
11
Output
4

方法1

上記の問題を解決する1つの方法は、効率的な方法ではありませんが、以下のとおりです。

def main():
   n, k = [int(c) for c in input().split()]
   cnt = 0
   for _ in range(n):
      t = int(input())
      if t % k == 0:
         cnt += 1
   print(cnt)

if __name__ == "__main__":
   main()

方法2

上記の問題を解決するもう1つのより効率的な方法は、stdinとstdoutを使用することです。以下のプログラムは、前のプログラムと比較してはるかに高速に実行されます。

from sys import stdin, stdout

def main():
   n, k = [int(c) for c in input().split()]
   cnt = 0
   for _ in range(n):
      t = int(stdin.readline())
      if t % k == 0:
         cnt += 1
   stdout.write(str(cnt))

if __name__ == "__main__":
   main()

方法3

上記の前の2つよりもはるかに高速な上記の問題を解決する別の方法は、stdinとstdoutを使用することです(方法2で使用した方法と非常に似ています)が、入力全体を一度に読み取り、リストにロードします。

def main():
   for sys import stdin, stdout
   n, k = stdin.readline().split()
   n = int(n)
   k = int(k)

   cnt = 0
   lines = stdin.readlines()
   for line in lines:
      if int(line) % k == 0:
         cnt += 1
   stdout.write(str(cnt))

if __name__ == "__main__":
   main()

  1. Pythonが競技コーディングに最適なのはなぜですか

    競技プログラミングは一般に、適切なデータ構造を使用して効率的なアルゴリズムを利用するためのコーディングと呼ばれます。彼らは多くのレベルでプログラマーのスキルをテストします。 アルゴリズムとデータ構造の助けを借りて、さまざまなロジックを適用することによって、あなたに提起された架空のプログラミング問題を解決する必要があります。問題を解決するだけでなく、時間とスペースが非常に複雑な非常に効率的な解決策を考え出す必要があります。 いわゆる競技プログラミングの問題ステートメントの例は次のようになります- 小文字のラテン文字のみで構成される長さnの文字列sが与えられます。 文字列のサブ文字列は、そ

  2. Pythonでのタートルプログラミング

    カメはPythonの特別な羽です。 Turtleを使用すると、簡単に製図板に描くことができます。 まず、タートルモジュールをインポートします。次にウィンドウを作成し、次にタートルオブジェクトを作成し、タートルメソッドを使用して製図板に描画できます。 いくつかのカメの方法 方法 パラメータ 説明 Turtle() なし 新しいタートルオブジェクトを作成して返します forward() 金額 指定された量だけカメを前進させます backward() 金額 指定された量だけカメを後方に動かします right() 角度 カメを時計回りに回転させます left() 角