কম্পিউটার

C++ এ জিনের মোট মিউটেশন গ্রুপ খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে জিন নামক স্ট্রিংগুলির একটি তালিকা রয়েছে যেখানে প্রতিটি উপাদানের দৈর্ঘ্য একই এবং প্রতিটি উপাদানে "A", "C", "G" এবং/অথবা "T" অক্ষর রয়েছে। এখন কিছু নিয়ম আছে -

  • যখন একটি অক্ষর ছাড়া দুটি স্ট্রিং s1 এবং s2 একই স্ট্রিং হয়, তখন s1 এবং s2 একই মিউটেশন গ্রুপে থাকে৷

  • যখন দুটি স্ট্রিং s1 এবং s2 একটি গ্রুপে থাকে এবং s2 এবং s3 একটি গ্রুপে থাকে, তখন s1 এবং s3 একই গ্রুপে থাকে৷

আমরা মোট কতগুলি মিউটেশন গ্রুপ তৈরি করতে পারি তা খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুটটি জিনের মত হয় =["ACGT", "ACGC", "ACTT", "TTTT", "TGTT"], তাহলে আউটপুট হবে 2, কারণ দুটি মিউটেশন গ্রুপ রয়েছে:["ACGT", "ACGC", "ACTT"] এবং ["TTTT", "TTTG"]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   map <string, string> parent;
   string getPar(string& a){
      if(parent[a] == a)
         return a;
      return parent[a] = getPar(parent[a]);
   }
   bool unite(string& a, string& b){
      string parA = getPar(a);
      string parB = getPar(b);
      if(parA != parB){
         parent[parA] = parB;
         return true;
      }
      return false;
   }
   bool ok(string &a, string& b){
      int cnt = 0;
      for(int i = 0; i < a.size(); i++){
         cnt += a[i] != b[i];
      }
      return cnt == 1;
   }
   int solve(vector<string> v) {
      sort(v.begin(), v.end());
      set <string> s(v.begin(), v.end());

      int ret = v.size();
      for(auto& it : v){
         parent[it]= it;
      }
      for(auto& it : v){
         for(int j = 0; j < it.size(); j++){
            string temp = it;
            for(char x : {'A', 'C', 'G', 'T'}){
               if(x != it[j]){
                  temp[j] = x;
                  if(s.count(temp)){
                     if(unite(temp, it)) ret--;
                  }
               }
            }
         }
      }
      return ret;
   }
};
main(){
   vector<string> v = {"ACGT", "ACGC", "ACTT", "TTTT", "TGTT"};
   Solution(ob);
   cout << ob.solve(v);
}

ইনপুট

{"ACGT", "ACGC", "ACTT", "TTTT", "TGTT"}

আউটপুট

2

  1. C++ এ একটি লাইনের মধ্যবিন্দু খুঁজে বের করার জন্য প্রোগ্রাম

  2. C++ এ ত্রিভুজের সেন্ট্রোয়েড খুঁজে বের করার প্রোগ্রাম

  3. C++ এ একটি পেন্টাগনের এলাকা খুঁজে বের করার প্রোগ্রাম

  4. C++ এ সমান্তরালগ্রামের ক্ষেত্রফল বের করার প্রোগ্রাম