Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

경쟁 프로그래밍을 위한 Python 입력 방법?

<시간/>

여기에서 우리는 Python에서 경쟁 프로그래밍을 위한 다양한 I/O 방법을 볼 것입니다. 경쟁 프로그래밍에서는 다른 사람보다 유리하도록 가능한 한 빨리 입력을 읽는 것이 중요합니다.

코드포스 또는 유사한 온라인 주드(SPOJ와 같은)에 있고 숫자 a, b, c, d를 읽고 해당 제품을 인쇄해야 한다고 가정합니다. 여러 가지 방법이 있습니다. 하나씩 살펴보겠습니다.

이를 수행하는 한 가지 방법은 목록 이해와 지도 기능을 사용하는 것입니다.

방법 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-Enormous Input Test on SPOJ입니다.

입력

입력은 두 개의 양의 정수 n k (n, k<=10 7 ). 다음 n줄의 입력에는 10 9 이하의 양의 정수 ti가 포함됩니다. , 각각.

출력

출력할 단일 정수를 작성하여 k로 나눌 수 있는 정수 ti의 수를 나타냅니다.

어디

  • 입력 :입력은 두 개의 양의 정수 n과 k로 시작합니다(여기서 - n, k <=10). 입력의 다음 줄에는 각각 10*9 이하의 양의 정수 t 하나가 포함됩니다.

  • 출력 :k로 나눌 수 있는 정수 t의 수를 나타내는 단일 정수

예를 들어

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

방법 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

위의 문제를 해결하는 또 다른 효율적인 방법은 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

위에서 언급한 이전 두 가지보다 훨씬 빠른 위의 문제를 해결하는 또 다른 방법은 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()