Python在竞赛编程中的输入方法?


我们将了解Python在竞赛编程中I/O方法的不同方式。在竞赛编程中,尽可能快地读取输入非常重要,以便获得优势。

假设您正在参加Codeforces或类似的在线评判系统(如SPOJ),您必须读取数字a、b、c、d并打印它们的乘积。有多种方法可以做到这一点,让我们一一探索它们。

一种方法是通过列表推导和map函数。

方法1:使用列表推导

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

方法2:使用map函数

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

另一种解决上述问题的方法是使用stdin和stdout,这要快得多。

方法1a:使用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-巨大的输入测试。

输入

输入以两个正整数n k (n, k<=107)开头。接下来的n行输入包含一个正整数ti,每个数都不大于109

输出

输出一个整数,表示有多少个整数ti能被k整除。

其中

  • 输入:输入以两个正整数n和k开头(其中n, k <=10)。接下来的n行输入包含一个正整数t,每个数都不大于109

  • 输出:一个整数,表示有多少个整数t能被k整除。

例如

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()

更新于:2019年7月30日

1000+ 次浏览

开启您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.