इसमें हम पायथन में प्रतिस्पर्धी प्रोग्रामिंग के लिए I/O विधियों के विभिन्न तरीकों को देखने जा रहे हैं। प्रतिस्पर्धी प्रोग्रामिंग में जितनी जल्दी हो सके इनपुट को पढ़ना महत्वपूर्ण है ताकि दूसरों पर लाभ उठा सकें।
मान लीजिए कि आप एक कोडफोर्स या इसी तरह के ऑनलाइन जूड (जैसे एसपीओजे) में हैं और आपको नंबर ए, बी, सी, डी पढ़ना है और उनके उत्पाद को प्रिंट करना है। करने के कई तरीके हैं, आइए उन्हें एक-एक करके एक्सप्लोर करें
ऐसा करने का एक तरीका या तो सूची समझ और मानचित्र फ़ंक्शन के माध्यम से है।
विधि 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)
उपरोक्त समस्या को हल करने का एक और तरीका है स्टड और स्टडआउट का उपयोग करना जो बहुत तेज़ है।
विधि 1 ए :स्टडीन और स्टडआउट के साथ सूची समझ
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<=10 7 . से शुरू होता है ) इनपुट की अगली n पंक्तियों में एक धनात्मक पूर्णांक ti होता है, जो 10 9 . से अधिक नहीं होता है , प्रत्येक।
आउटपुट
आउटपुट के लिए एक पूर्णांक लिखें, यह दर्शाते हुए कि कितने पूर्णांक ti k से विभाज्य हैं।
कहां
-
इनपुट :इनपुट दो सकारात्मक पूर्णांक n और k (जहाँ- n, k <=10) से शुरू होता है। इनपुट की अगली पंक्तियों में एक धनात्मक पूर्णांक t होता है जो प्रत्येक 10*9 से बड़ा नहीं होता है।
-
आउटपुट :एक एकल पूर्णांक यह दर्शाता है कि कितने पूर्णांक 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
उपरोक्त समस्या को हल करने का एक और अधिक कुशल तरीका है स्टड और स्टडआउट का उपयोग करना। नीचे का प्रोग्राम पिछले वाले की तुलना में बहुत तेज चलता है।
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
उपरोक्त समस्या को हल करने का एक और तरीका है जो ऊपर बताए गए पिछले दो की तुलना में बहुत तेज़ है, स्टड और स्टडआउट (जिस तरह से हमने विधि 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()