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

प्रतिस्पर्धी प्रोग्रामिंग के लिए C++ ट्रिक्स (C++ 11 के लिए)?

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

  • यह जांचना कि कोई संख्या विषम है या % ऑपरेटर का उपयोग किए बिना भी। यह ट्रिक सरल है। हम संख्या और 1 के साथ बिटवाइज़ और ऑपरेशन कर सकते हैं। यदि परिणाम गैर-शून्य है तो यह विषम है, अन्यथा यह सम है। तर्क बहुत सरल है। सभी विषम संख्याओं में LSb पर 1 होता है। तो प्रदर्शन करने के बाद और 1 के साथ, यह एलएसबी को छोड़कर सभी पात्रों को मुखौटा कर देगा ताकि हम वांछित परिणाम आसानी से प्राप्त कर सकें।

if ((n & 1) != 0) {
   //this is odd
} else {
   //This is even
}
  • शिफ्ट ऑपरेटर का उपयोग करके तेजी से गुणा और भाग करें। यदि हम किसी संख्या को 2n जैसी संख्या से गुणा करना चाहते हैं तो हम संख्या को बाईं ओर n बार सरल रूप से स्थानांतरित कर सकते हैं। इसी तरह, यदि हम किसी संख्या को 2n से विभाजित करना चाहते हैं तो संख्या को 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];
}
  • अक्सर हम वेक्टर आदि जैसे कुछ कंटेनरों में नए तत्व जोड़ने के लिए एसटीएल में push_back() फ़ंक्शन का उपयोग करते हैं। इसका उपयोग किए बिना, हम emplace_back() का भी उपयोग कर सकते हैं। यह फ़ंक्शन बहुत तेज़ है। यह स्मृति को कहीं और आवंटित नहीं करता है, यह आवंटित स्मृति को कंटेनर में जोड़ता है।

  • C++ इनबिल्ट GCD फ़ंक्शन प्रदान करता है। हम उन्हें विभिन्न मामलों में उपयोग कर सकते हैं। सिंटैक्स नीचे जैसा है।

__gcd(x, y) //find GCD of x and y
  • मुख्य फ़ंक्शन में किसी सरणी का अधिकतम आकार 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 = floot(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);
  • itoa() नामक एक एल्गोरिदम है। इस एल्गोरिथम का उपयोग क्रमिक रूप से बढ़ते मूल्यों की एक श्रृंखला बनाने के लिए किया जा सकता है जैसे कि प्रारंभिक मान को *पहले निर्दिष्ट करके, फिर पोस्ट इंक्रीमेंट ऑपरेटर का उपयोग करके मान का उपयोग करना।

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
  • सी ++ में, हम सशर्त ऑपरेटरों का उपयोग किए बिना कीवर्ड का उपयोग कर सकते हैं। जैसे कीवर्ड 'और' का इस्तेमाल '&' के स्थान पर किया जा सकता है।

x = 10;
if(x < 10 and x > 5)
   cout << “True” << endl;
else
   cout << “False” << endl;
//This will return True

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

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

  1. प्रतिस्पर्धी प्रोग्रामिंग के लिए पायथन इनपुट तरीके?

    इसमें हम पायथन में प्रतिस्पर्धी प्रोग्रामिंग के लिए I/O विधियों के विभिन्न तरीकों को देखने जा रहे हैं। प्रतिस्पर्धी प्रोग्रामिंग में जितनी जल्दी हो सके इनपुट को पढ़ना महत्वपूर्ण है ताकि दूसरों पर लाभ उठा सकें। मान लीजिए कि आप एक कोडफोर्स या इसी तरह के ऑनलाइन जूड (जैसे एसपीओजे) में हैं और आपको नंबर

  1. प्रतिस्पर्धी कोडिंग के लिए पायथन ट्रिक्स

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