竞争性编程的Python输入法?

在本文中,我们将看到用于Python竞争性编程的I / O方法的不同方法。在竞争性编程中,重要的是要尽可能快地读取输入,以利用其他输入。

假设您处于编解码器或类似的在线裘皮(例如SPOJ)中,并且必须阅读数字a,b,c,d并打印其产品。有多种方法,让我们逐一探讨

一种方法是通过列表理解和map函数。

方法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")

让我们看一下竞争性编程中的另一个问题,我们可以在该问题上测试我们的输入和输出方法。该问题称为SPOJ上的INTEST大量输入测试。

输入项

输入以两个正整数nk(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()