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