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()
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP