কম্পিউটার

প্রতিযোগিতামূলক প্রোগ্রামিংয়ের জন্য C++ কৌশল


এখানে আমরা C++ প্রোগ্রামিং ভাষার কিছু ভালো কৌশল দেখব যা আমাদের বিভিন্ন ক্ষেত্রে সাহায্য করতে পারে। যেমন আমরা যদি কিছু প্রতিযোগিতামূলক প্রোগ্রামিং ইভেন্টে অংশগ্রহণ করতে চাই, তাহলে এই কৌশলগুলো আমাদের কোড লেখার সময় কমাতে সাহায্য করবে। আসুন এক এক করে এই উদাহরণগুলির কয়েকটি দেখি৷

% অপারেটর ব্যবহার না করে একটি সংখ্যা বিজোড় বা জোড় কিনা তা পরীক্ষা করা হচ্ছে। এই কৌশল সহজ. আমরা সংখ্যা এবং 1 দিয়ে বিটওয়াইজ এবং অপারেশন করতে পারি। যদি ফলাফলটি অ-শূন্য হয় তবে এটি বিজোড়, অন্যথায় এটি জোড়। যুক্তি খুব সহজ. LSb-এ সমস্ত বিজোড় সংখ্যার 1 আছে। তাই এবং 1 এর সাথে পারফর্ম করার পরে, এটি LSb ব্যতীত সমস্ত অক্ষরকে মাস্ক করবে যাতে আমরা সহজেই পছন্দসই ফলাফল পেতে পারি।

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;

আমরা তৃতীয় ভেরিয়েবল ব্যবহার না করে দুটি সংখ্যা অদলবদল করতে পারি। এটি + এবং – অপারেটর ব্যবহার করে করা যেতে পারে। কিন্তু আমরা bitwise 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

প্রধান ফাংশনে একটি অ্যারের সর্বাধিক আকার 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

C++ এ, আমরা শর্তসাপেক্ষ অপারেটর ব্যবহার না করে কীওয়ার্ড ব্যবহার করতে পারি। কীওয়ার্ডের মতো 'এবং' ব্যবহার করা যেতে পারে '&'-এর জায়গায়।

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

  1. BFS C++ এ প্রতিযোগিতামূলক কোডিংয়ের জন্য STL ব্যবহার করছে?

  2. C++ প্রোগ্রামিং ভাষা কি?

  3. প্রতিযোগিতামূলক প্রোগ্রামিংয়ের জন্য পাইথন ইনপুট পদ্ধতি?

  4. প্রতিযোগিতামূলক কোডিংয়ের জন্য পাইথন কৌশল