竞争性编程的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<=107)开头。接下来的n行输入包含一个不大于109的正整数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()