अपने प्रतिस्पर्धी प्रोग्रामिंग को कैसे गति दें?

हैश कोड 2019 से छवि

यदि आप प्रतिस्पर्धी प्रोग्रामिंग के बारे में जानते हैं, तो आप शायद मज़े से परिचित होंगे और इसे प्रदान करेंगे जब आप एक कठिन समस्या पर एसी देखते हैं।

मुझे लगता है कि आप कितने अच्छे हैं, बहुत हद तक आपके कथन का विश्लेषण करने, उपप्रकारों की पहचान करने, समाधान खोजने और उन्हें लागू करने की आपकी क्षमता पर निर्भर है। बहुत सारे संसाधन / वेबसाइट पहले तीन के लिए उपलब्ध हैं, लेकिन बाद के एक पर बहुत सारे नहीं हैं। इसलिए ब्लॉग की इस श्रृंखला में, मैं इस बात पर ध्यान केंद्रित करूंगा कि आपके समाधानों को कैसे लागू किया जाए और उन्हें तेजी से लागू किया जाए।

नोट: जैसा कि मैं आमतौर पर अपने समाधानों के लिए C ++ का उपयोग करता हूं, यह ब्लॉग और इसके उदाहरण C ++ के लिए होगा, लेकिन अन्य भाषाओं में भी इसे आसानी से बढ़ाया जा सकता है।

सेट अप

मैं MinGW के साथ एक विंडोज मशीन का उपयोग करता हूं, और पसंद का पाठ संपादक कुछ मामूली अनुकूलन के साथ वेनिला उदात्त पाठ है। यदि आप एक समान सेटअप करना चाहते हैं, तो लेख के अंत में एक ट्यूटोरियल से लिंक करें।

स्निपेट्स

एक पेड़ पर एक चौड़ाई-पहली खोज करना और 25 सेकंड से कम समय में निष्पादित करना

यदि आपको पता नहीं है कि स्निपेट क्या हैं, तो "स्निपेट री-यूजेबल सोर्स कोड के एक छोटे से क्षेत्र के लिए एक प्रोग्रामिंग शब्द है," और बहुत से आधुनिक टेक्स्ट एडिटर जैसे सबलाइम आपको बस एक पूर्वनिर्धारित स्निपेट लिखने के लिए स्वचालित रूप से एक कार्यक्षमता प्रदान करते हैं। एक खोजशब्द लिख रहा हूँ।

मैं इस पर पर्याप्त जोर नहीं दे सकता कि मुझे कितना लगता है, और स्निपेट का उपयोग करके अपने कार्यान्वयन को गति दे सकता है। तो चाहे आपको एक ब्रेड-फ़र्स्ट या डेप्थ-फर्स्ट सर्च करने की ज़रूरत हो या सेगमेंट ट्री का उपयोग करने की आवश्यकता हो या मैट्रिक्स एक्सपेंशनशिप करना चाहते हों, आप इसके कोड से बस एक (कीवर्ड + टैब) दूर हैं।

यह न केवल आपकी गति में सुधार करेगा, बल्कि बदले में, आपको बहुत अधिक समय गंवाए बिना, कई दृष्टिकोणों को जल्दी से आज़माने और उनके बीच स्विच करने की अनुमति देगा।

कैसे एक स्निपेट जोड़ें

उदात्त पाठ में एक स्निपेट जोड़ना बहुत सीधा है। बस टूल्स> डेवलपर्स> न्यू स्निपेट पर जाएं।

स्निपेट के लिए इसे अपने बेस टेम्प्लेट के रूप में उपयोग करें और उस कोड को पेस्ट करें जिसे आप अपने स्निपेट में टिप्पणी और ट्रिगर कीवर्ड द्वारा प्रतिस्थापित करना चाहते हैं।

उदाहरण: एक फेनविक ट्री का एक पूर्ण स्निपेट

मुझे स्निपेट्स का उपयोग करना बहुत पसंद है और सबसे कठिन हिस्सा उनका उपयोग करना है ताकि आप उन्हें ज़रूरत से पहले बना सकें। इसलिए आपके लिए चीजों को आसान बनाने के लिए, मैंने अपने कुछ सबसे अधिक इस्तेमाल किए जाने वाले स्निपेट्स और प्रासंगिक निर्देशों के साथ एक जीथब रिपोजिटरी बनाई है। बेझिझक उनका उपयोग करें और योगदान पर विचार करें।

मैक्रो

एक मैक्रो 'मैक्रोइन्स्ट्रक्शन' के लिए खड़ा है "एक एकल निर्देश जो किसी विशेष कार्य को करने के लिए निर्देशों के एक सेट में स्वचालित रूप से फैलता है।"

आम शब्दों में, वे उन चीजों के लिए छोटी सूचनाओं को असाइन करने का एक तरीका है जो आमतौर पर लिखने के लिए लंबे होते हैं। वे स्निपेट्स के समान सुंदर हैं लेकिन आम तौर पर वास्तव में छोटे हैं।

उदाहरण के लिए, हम सभी को अपने कार्यक्रमों में लूप के लिए लिखना होगा। एक सामान्य रूप से (इंट i = 0; i) के लिए जाता है

तो एक समाधान एक मैक्रो लिखने के लिए है जो इसे केवल (i, N) के लिए छोटा कर सकता है यह न केवल आपको तेज़ी से कोड करने में मदद कर सकता है, बल्कि आपके कोड को नेत्रहीन रूप से कम अव्यवस्थित बनाता है, जो डीबगिंग में मदद कर सकता है।

मैक्रो कैसे लिखें

वे #define का उपयोग करते हुए लिखना काफी आसान है, आप निम्नलिखित गिस्ट को एक उदाहरण के रूप में ले सकते हैं और अपने मैक्रोज़ बनाने के लिए इसका अनुसरण कर सकते हैं। मैंने अपने प्रतिस्पर्धी टेम्प्लेट में कुछ मैक्रोज़ का उपयोग किया है जो आप उपरोक्त भंडार में भी पा सकते हैं।

बहुत सारी यादृच्छिक उपयोगी चीजें / टोटके

आप में से बहुत से पहले से ही उनमें से कुछ के बारे में पता कर सकते हैं, लेकिन बाकी अभी भी मददगार हो सकते हैं। उनमें से कुछ सब्बल टेक्स्ट पर ध्यान केंद्रित करते हैं।

एक साथ टाइपिंग का उदाहरण
  • एक साथ टाइपिंग: उदात्त पाठ आपको विभिन्न स्थानों पर एक साथ टाइपिंग की सुविधा प्रदान करता है और एक बार में आपके पूरे कोड में समान परिवर्तन करने में मदद कर सकता है। एक साथ टाइप करने के लिए, बस उन जगहों पर क्लिक करें जहाँ आप Ctrl कुंजी रखते हुए टाइप करना चाहते हैं, और एक बार आपके पास सभी पदों पर जहाँ आप टाइप करना चाहते हैं, नियंत्रण छोड़ दें और टाइप करना शुरू करें। यह कभी-कभी आपकी मदद कर सकता है जब आपने अपने कार्यक्रम में कई स्थानों पर एक ही गलती की है और उन्हें सही करें।
  • पूर्व संकलित हेडर: कभी-कभी, हमें डिबगिंग करते समय अपना कार्यक्रम 10 बार चलाना पड़ता है, और निष्पादन जितना तेज़ होता है, उतना ही बेहतर होता है। पूर्व-संकलित शीर्षलेख आपके कार्यक्रम को चलाने के लिए हर बार 3 से 5 सेकंड तक बचा सकते हैं, जो कि बहुत अधिक लग सकता है, लेकिन यदि किसी प्रतियोगिता में आपने 20 बार के लिए अपने कोड संकलित किए और चलाए, तो प्रभावी रूप से आपने लगभग 1:30 मिनट बचाया जो कभी-कभी हो सकता है। अंतिम समस्या को हल करने और इसे पूरा करने में सक्षम नहीं होने के बीच अंतर। यह कैसे करें के चरण पर्यावरण सेटअप ब्लॉग में उपलब्ध हैं जो मैंने नीचे संसाधनों में सूचीबद्ध किया था।
  • बहुत आसान सवालों के बयानों को पढ़ना छोड़ दें: यदि आप नियमित रूप से प्रतियोगिताओं में भाग लेते हैं, और आसान समस्याओं के साथ कुछ अनुभव रखते हैं, तो आप लंबे बयानों को छोड़ना शुरू कर सकते हैं (विशेष रूप से कोडोर ए की तरह कुछ के लिए) और अंतिम 2-3 वाक्यों पर ध्यान केंद्रित करें समस्या या अगर कोई वाक्य है जो औपचारिक रूप से "औपचारिक रूप से" के साथ शुरू होता है, तो ith कार्य को दो पूर्णांकों ti और ​​ci द्वारा प्राप्त किया गया था - प्राप्त करने का समय (दूसरा) और पाठ संदेशों की संख्या और आपको ci को अधिकतम करना होगा। " और परीक्षण के मामले भी। इससे आपको 2–3 मिनट का फायदा मिल सकता है जिसका हमेशा स्वागत है।
  • कीबोर्ड शॉर्टकट: कुछ उपयोगी हैं:

Ctrl + Shift + D: जब कुछ चुने बिना उपयोग किया जाता है, तो आपकी वर्तमान लाइन डुप्लिकेट हो जाती है, और यदि कुछ चुने हुए के साथ उपयोग किया जाता है, तो चुना हुआ पाठ डुप्लिकेट होता है।

शॉर्टकट Ctrl + Shift + D का उदाहरण

Ctrl + Shift + K: जब कुछ चुने बिना उपयोग किया जाता है, तो आपकी वर्तमान लाइन हटा दी जाती है, और यदि कुछ चुने हुए के साथ उपयोग किया जाता है, तो चुनी हुई लाइनें हटा दी जाती हैं।

शॉर्टकट Ctrl + Shift + K का उदाहरण

Ctrl + Shift + Up / Down Key: जब कुछ चुने बिना उपयोग किया जाता है, तो आपकी वर्तमान लाइन को ऊपर या नीचे ले जाया जा सकता है, और यदि कुछ चयनित के साथ उपयोग किया जाता है, तो चयनित लाइनें ऊपर या नीचे चली जाती हैं।

शॉर्टकट Ctrl + Shift + ऊपर / नीचे कुंजी का उदाहरण

Ctrl + /: चयनित लाइनों को जल्दी से टिप्पणी करने और उन्हें अनसुना करने के लिए उपयोग किया जा सकता है यदि कुछ भी नहीं चुना गया है तो इसका प्रभाव वर्तमान लाइन पर है।

  • मैचिंग ब्रैकेट्स और एक ही टेक्स्ट हाइलाइट: यदि आप एक ओपनिंग ब्रैकेट या एंडिंग ब्रैकेट के बगल में क्लिक करते हैं तो स्वचालित रूप से दूसरे मैचिंग ब्रैकेट को दिखाते हैं जो कभी-कभी डीबगिंग कोड के दौरान सहायक हो सकते हैं। इसके अलावा, यदि आप किसी पाठ या चर का चयन करते हैं तो उदात्तता स्वचालित रूप से उन सभी स्थानों को उजागर करेगी जहां यह दस्तावेज़ में मौजूद है।
  • टेम्प्लेट का उपयोग करना: आप जिस भी भाषा का उपयोग करते हैं, हमेशा एक बेस टेम्प्लेट होना एक अच्छा विचार है, जिसमें आपका मैक्रोज़ या शायद सामान्य इनपुट होता है, जिसे आप लेना चाहते हैं या हो सकता है कि कोई क्रेज़ी ASCII आर्ट (मुझे पता है कि आप लिंक a चाहते हैं)। बेहतर विचार (लिंक) के लिए आप मेरे खाके पर भी नज़र डाल सकते हैं।
  • सिंगल लाइन स्टेटमेंट्स के लिए कोई ब्रैकेट नहीं: C ++ में, आप एक स्प्लिट सेकंड या अधिक महत्वपूर्ण रूप से आपको बचा सकते हैं, यदि आप एक लूप या एक स्टेटमेंट में एकल स्टेटमेंट लिखना चाहते हैं, तो ब्रैकेट्स को स्किप करके अपने कोड को थोड़ा क्लीनर बना सकते हैं।
  • ढूँढें और बदलें: आप ढूँढें और बदलें या सभी का उपयोग करने के लिए Ctrl + Shift + F का उपयोग कर सकते हैं और परिवर्तन करने के लिए एक साथ टाइपिंग का उपयोग कर सकते हैं।

कुछ संसाधन

  • प्रतियोगी प्रोग्रामर की हैंडबुक (लिंक): वास्तव में महान, सहायक और सटीक पुस्तक। बहुत ज्यादा बेहतरीन।
  • प्रतियोगी प्रोग्रामिंग कोर्स (लिंक)
  • डेटा संरचनाएं और एल्गोरिदम विशेषज्ञता (लिंक)
  • Geeks for Geeks, Codeforces, Codechef, HackerEarth, Hackerblocks।

इस सब के माध्यम से पढ़ने के लिए बहुत बहुत धन्यवाद, कृपया मुझे बताएं कि क्या आपके पास कुछ संभावित सुधार या जोड़ है। ताली बजाओ और पसंद आए तो शेयर करो। आप गितूब पर स्निपेट रिपॉजिटरी में भी योगदान कर सकते हैं।