কম্পিউটার

C++ এ অ্যাসাইনমেন্ট পাস করা


এই টিউটোরিয়ালে, আমাদের একটি অ্যালগরিদম লিখতে হবে যাতে পরিদর্শকের হাতে ধরা না পড়ে একটি অ্যাসাইনমেন্ট পাস করার উপায় খুঁজে বের করা যায়। প্রতিটি ছাত্রকে তাদের নিয়োগ পরিদর্শকের কাছে জমা দিতে হবে। স্টুডেন্ট A এর অ্যাসাইনমেন্ট স্টুডেন্ট B এর সাথে থাকে, তাই স্টুডেন্ট B কে অ্যাসাইনমেন্টটি স্টুডেন্ট A-কে ফিরিয়ে দিতে হবে/পাশ করতে হবে ইনভিজিলেটর তাদের খেয়াল না করে।

সব ছাত্ররা এক কাতারে বসে আছে। আমাদের ধরা না পড়েই স্টুডেন্ট A-তে অ্যাসাইনমেন্ট ফেরত দেওয়ার উপায় খুঁজে বের করতে হবে। বিভিন্ন প্রয়োজনীয়তা যার অধীনে তারা অ্যাসাইনমেন্ট পাস করতে পারে তা অনুসরণ করা হয় -

  • স্টুডেন্ট A (ইনডেক্স i) তার প্রতিবেশীকে অ্যাসাইনমেন্ট পাস করতে পারে যারা ইনডেক্স (i-1) এবং (i+1)

  • শিক্ষার্থীরা তাদের সাথে অ্যাসাইনমেন্ট দিতে, গ্রহণ করতে বা ধরে রাখতে পারে।

  • পরিদর্শক সূচক [il, rl] থেকে সমস্ত ছাত্রদের দেখছেন।

  • ছাত্র যখন পরিদর্শকের ঘড়ির মধ্যে থাকে, তখন তারা অ্যাসাইনমেন্ট পাঠাতে বা গ্রহণ করতে পারে না।

  • যদি ছাত্র সেই পরিসরে থাকাকালীন তাদের সাথে অ্যাসাইনমেন্ট ধরে রাখে, তাহলে পরিদর্শক তাদের ধরতে পারবে না।

আমাদের চারটি ইনপুট দেওয়া হয়েছে p, q, r, s যেখানে p হল মোট ছাত্রের সংখ্যা, q হল মোট ধাপের সংখ্যা যেখানে পরিদর্শক il থেকে rl পর্যন্ত নজর রাখছেন, c হল ছাত্র A এর অবস্থান এবং d ছাত্র বি.

এর অবস্থান

প্রতিটি ধাপে (q) তিনটি ইনপুট রয়েছে −

  • পরিদর্শক প্রদত্ত পরিসরের উপর নজর রাখবে মোট সময়।

  • সবচেয়ে বাম অন্তর্ভুক্ত পরিসরে, পরিদর্শক দেখছেন৷

  • সর্বোত্তম অন্তর্ভুক্ত পরিসর, পরিদর্শক, দেখছে।

3টি শব্দের একটি আউটপুট ক্রম প্রয়োজন:"বাম," "ডান" এবং "রাখুন", যদি শিক্ষার্থীরা অ্যাসাইনমেন্টটি পাস করে (বাম/ডান) বা রেখে দেয় তবে তার কার্যকলাপ নির্দেশ করে। উদাহরণের জন্য,

পদক্ষেপ

ইনপুট

8 3 2 7
1 4 6
2 1 8
3 5 6

আউটপুট

Right
Keep
Right
Right
Right
Right

ব্যাখ্যা

এই নির্দেশাবলী অনুসরণ করে, অ্যাসাইনমেন্ট ধরা না পড়েই সূচক 2-এর ছাত্র থেকে সূচক 7-এর ছাত্রের কাছে পৌঁছে যাবে।

ইনপুট

5 1 1 3
1 2 5

আউটপুট

Keep
Right
Right

ব্যাখ্যা

এই নির্দেশাবলী অনুসরণ করে, অ্যাসাইনমেন্ট ধরা না পড়ে সূচক 1-এর ছাত্র থেকে সূচক 3-এর ছাত্রের কাছে পৌঁছে যাবে।

সমাধান খোঁজার পদ্ধতি

একটি প্রদত্ত দৃষ্টান্তে, যদি পরিদর্শক সেই পরিসরে নজর রাখে, হয় বর্তমানে অ্যাসাইনমেন্ট থাকা ছাত্র বা যে ছাত্রকে অ্যাসাইনমেন্ট পাঠানো হবে, তাহলে সেই ছাত্রটি সেই অ্যাসাইনমেন্টটি তার কাছে রাখবে। অন্যথায় তিনি এটিকে তার পাশের ছাত্রকে চূড়ান্ত লক্ষ্যের দিকে দিয়ে দেন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void solve(int p, int q, int r, int s,
long t[], int l[], int ar[]){
   int dir;
   string val;
   if (r < s) {
      dir = 1;
      val = "Right";
   } else {
      dir = -1;
      val = "Left";
   }
   string answer = "";
   int i = 0, current = r;
   long tim = 1;
   while (1) {
      if (i < q && tim == t[i]) {
         if ((current >= l[i] && current <= ar[i]) ||
         (current + dir >= l[i] && current + dir <= ar[i])) {
            answer += "Keep\n";
            tim++;
            i++;
            continue;
         }
         i++;
      }
      current += dir;
      answer += val+"\n";
      tim++;
      if (current == s)
         break;
   }
   cout << answer << endl;
}
int main(){
   int p = 8, q = 3, r = 2, s = 7;
   long t[q + 2] = { 1,2,3 };
   int l[q + 2] = { 4,1,5 };
   int ar[q + 2] = { 6,8,6 };
   solve(p, q, r, s, t, l, ar);
   return 0;
}

আউটপুট

Right
Keep
Right
Right
Right
Right

উপসংহার

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


  1. C++ এ গোলকধাঁধা II

  2. C++ এ গোলকধাঁধা

  3. C++ এ বিজয়ীর ভবিষ্যদ্বাণী করুন

  4. C++ এ ধাঁধা III