Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

प्रतिस्पर्धी प्रोग्रामिंग में शुरुआती लोगों के लिए कुछ उपयोगी C++ ट्रिक्स


यहां हम C++ प्रोग्रामिंग भाषा के कुछ अच्छे ट्रिक्स देखेंगे जो विभिन्न क्षेत्रों में हमारी मदद कर सकते हैं। जैसे यदि हम कुछ प्रतिस्पर्धी प्रोग्रामिंग आयोजनों में भाग लेना चाहते हैं, तो ये ट्रिक्स कोड लिखने के समय को कम करने में हमारी मदद करेंगे। आइए इन उदाहरणों को एक-एक करके देखें।

  • % ऑपरेटर के बिना किसी संख्या की विषम या सम जांच करना: यह ट्रिक सरल है। हम संख्या और 1 के साथ बिटवाइज AND ऑपरेशन कर सकते हैं। यदि परिणाम शून्येतर है तो यह विषम है, अन्यथा सम। तर्क बहुत सरल है। सभी विषम संख्याओं में LSB पर 1 होता है। इसलिए 1 के साथ AND करने पर, यह LSB को छोड़कर सभी वर्णों को मास्क कर देगा, इसलिए हम आसानी से वांछित परिणाम प्राप्त कर सकते हैं।
if ((n & 1) != 0){ //this is odd } else { //This is even }
  • शिफ्ट ऑपरेटर का उपयोग करके तेजी से गुणा और भाग: यदि हम किसी संख्या को 2^n जैसी संख्या से गुणा करना चाहते हैं तो हम संख्या को बाएं n बार शिफ्ट कर सकते हैं। इसी तरह, यदि हम किसी संख्या को 2^n से विभाजित करना चाहते हैं तो संख्या को दाएं n बार शिफ्ट करें।
x = 40; y = x << 2; //x will be multiplied with 4, so y = 160 cout << x; x = 40; y = x >> 2; //x will be divided by 4, so y = 10 cout << x;
  • तीसरे वेरिएबल के बिना दो संख्याओं को स्वैप करना: यह + और - ऑपरेटर्स का उपयोग करके किया जा सकता है। लेकिन हम इसे बिटवाइज XOR ऑपरेटर्स का उपयोग करके भी कर सकते हैं। आप संख्याओं को मैन्युअली जांच सकते हैं।
//swap x and y x ^= y; y ^= x; x ^= y;
  • कभी-कभी ऐसी बाधाएं होती हैं कि हम अपने कोड में strlen() फ़ंक्शन का उपयोग नहीं कर सकते। उस स्थिति में हम अपना strlen() फ़ंक्शन बनाते हैं। यदि मामला केवल वर्णों को एक्सेस करने का है, तो हमें वास्तव में ऐसा करने की आवश्यकता नहीं है। हम जांच सकते हैं कि स्थिति i पर वर्ण वैध (शून्येतर) है या नहीं। यदि यह शून्येतर है तो हम ट्रैवर्स कर सकते हैं, अन्यथा रुकें।
for(int i = 0; s[i]; i++){ cout << s[i]; }
  • अक्सर हम STL में नए तत्व को वेक्टर जैसे कंटेनर्स में जोड़ने के लिए push_back() फ़ंक्शन का उपयोग करते हैं। इसके बिना, हम emplace_back() का भी उपयोग कर सकते हैं। यह फ़ंक्शन बहुत तेज है। यह कहीं और मेमोरी आवंटित नहीं करता, यह कंटेनर में आवंटित मेमोरी को जोड़ता है।
  • C++ इनबिल्ट GCD फ़ंक्शन प्रदान करता है। हम उन्हें विभिन्न मामलों में उपयोग कर सकते हैं। सिंटैक्स नीचे दिया गया है।
__gcd(x, y) //find GCD of x and y
  • main फ़ंक्शन में सरणी का अधिकतम आकार 10^6 के क्रम का होता है। लेकिन यदि सरणी ग्लोबली घोषित की जाती है, तो हम 10^7 तक का आकार घोषित कर सकते हैं।
  • हम लॉग ऑपरेशन का उपयोग करके किसी भी संख्या का सबसे महत्वपूर्ण अंक गणना कर सकते हैं। आइडिया पाने के लिए निम्नलिखित तर्क देखें
n = 4578; double k = log10(n); k = k - floor(k); int x = pow(10, k); //x is the most significant digit
  • लॉग ऑपरेशन का उपयोग करके सीधे अंकों की संख्या की गणना करें। इसके लिए हम किसी लूप का उपयोग नहीं करते।
n = 4578; int digit_count = floor(log10(n)) + 1
  • हम सीधे इस तर्क का उपयोग करके जांच सकते हैं कि संख्या 2 की घात है या नहीं।
x = 1024; bool check = x && (!(x & (x-1))); //if this is true, then power of two.
  • C++ में कुछ इनबिल्ट एल्गोरिदम हैं, जो निम्नलिखित शर्तों की जांच कर सकते हैं।
all_of(left, left + n, isPositive()); //check all are positive or not any_of(left, left + n, isPositive()); //check at least one positive or not. none_of(left, left + n, isPositive()); //check no elements are positive
  • एक कंटेनर से दूसरे में तत्वों को कॉपी करने के लिए कॉपी फ़ंक्शन।
int src[5] = {10, 20, 30, 40, 50}; int des[5]; copy_n(src, 5, dest);
  • इटोआ() नामक एक एल्गोरिदम है। इस एल्गोरिदम का उपयोग अनुक्रमिक रूप से बढ़ते मानों की एक श्रृंखला बनाने के लिए किया जा सकता है जैसे कि *first को प्रारंभिक मान असाइन करके, फिर पोस्ट-इन्क्रीमेंट ऑपरेटर का उपयोग करके मान का उपयोग करके।
int arr[5] = {0}; char str[5] = {0}; itoa(arr, arr+5, 15); //it will generate {15, 16, 17, 18, 19} itoa(str, str+5, 'A'); //it will generate {'A', 'B', 'C', 'D', 'E'}
  • बाइनरी रूप में मान असाइन करें। हम किसी बाइनरी संख्या को दर्शाने के लिए 0b प्रीफिक्स का उपयोग कर सकते हैं।
int x = 0b1101; //then x will hold 13
  • C++ में, हम सशर्त ऑपरेटर्स के बिना कीवर्ड्स का उपयोग कर सकते हैं। जैसे कीवर्ड 'and' का उपयोग '&&' के स्थान पर किया जा सकता है।
x = 10; if(x < 10 and x > 5) cout << “True” << endl; else cout << “False” << endl; //This will return True

  1. शुरुआती लोगों के लिए C ट्यूटोरियल: यह आपके विचार से आसान है! शुरुआती लोगों के लिए C ट्यूटोरियल: यह आपके विचार से आसान है!

    C की बहुमुखी प्रतिभा और उपयोगिता वाली कुछ प्रोग्रामिंग भाषाएं हैं, लेकिन भाषा स्वयं अक्सर डराने वाली लग सकती है, खासकर एक नवागंतुक के लिए। अच्छी खबर यह है कि C सीखना उतना मुश्किल नहीं है जितना लग सकता है, और आपके पैर जमाने में मदद करने के लिए मुफ्त में कई संसाधन उपलब्ध हैं। C प्रोग्रामिंग का इतिह

  1. C++ में STL का उपयोग करके BFS (प्रतिस्पर्धी प्रोग्रामिंग के लिए) C++ में STL का उपयोग करके BFS (प्रतिस्पर्धी प्रोग्रामिंग के लिए)

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

  1. - प्रतिस्पर्धात्मक कोडिंग के लिए Python ट्रिक्स

    Python अधिकांश प्रतिस्पर्धात्मक प्रोग्रामिंग चुनौतियों के लिए कोडर्स के बीच पसंदीदा भाषाओं में से एक है। अधिकांश समस्याओं को Python का उपयोग करके उचित समय सीमा में आसानी से हल किया जाता है। कुछ जटिल समस्याओं के लिए, पर्याप्त तेज़ Python कोड लिखना अक्सर एक चुनौती होती है। नीचे कुछ पायथनिक कोड निर्म