কম্পিউটার টিউটোরিয়াল

২-ডি স্পেসে পয়েন্টের ট্রিপলেট জোড়া (A, B, C) গণনা যাতে শর্ত পূরণ হয় C++-এ


আমাদের ২-ডি স্পেসে N সংখ্যক পয়েন্ট দেওয়া আছে। লক্ষ্য হল ইনপুট থেকে পয়েন্টের ট্রিপলেটের সংখ্যা বের করা যাতে একটি পয়েন্ট অন্য দুটির মধ্যরেখা বিন্দু হয়ে থাকে। অর্থাৎ যদি ট্রিপলেট হয় (A,B,C) তবে B হল A এবং C-এর মধ্যরেখা বিন্দু (অথবা A,B,C-এর যেকোনো অন্যান্য ক Vereinigung)।

পদ্ধতি
  • সকল পয়েন্টকে জোড়া হিসেবে ভেক্টরে সংরক্ষণ করা হয়।
  • তারপর ভেক্টরের সকল জোড়াকে একটি সেটে যোগ করা হয়।
  • সেট থেকে দুটি পয়েন্ট নিয়ে তাদের x এবং y কোঅর্ডিনেটের যোগফল ২ দিয়ে ভাগ করা হলে آیا সেই ফলাফল সেটে আছে কিনা তা পরীক্ষা করা হয়। থাকলে ট্রিপলেটের কাউন্ট বাড়ানো হয়।
উদাহরণ

ইনপুট:

{ 1,2 }, { 4,2} , { 2,1 } , { 7,2 } N=4 জোড়া

আউটপুট:

শর্ত পূরণকারী ট্রিপলেট জোড়ার সংখ্যা: 1

ব্যাখ্যা:

এখানে {4,2} হল {1,2} এবং {7,2}-এর মধ্যরেখা বিন্দু। মাত্র ১টি এ derart ট্রিপলেট রয়েছে।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
  • টাইপের জোড়ার একটি ভেক্টর নেওয়া হয়।
  • প্রতিটি জোড়ায় (x,y) কোঅর্ডিনেট থাকে।
  • mid_point(vector> vec, int size) ফাংশন ভেক্টর ও এর আকার নিয়ে শর্ত পূরণকারী ট্রিপলেটের সংখ্যা রিটার্ন করে।
  • প্রাথমিকভাবে count = 0 রাখা হয়।
  • ভেক্টরের সকল জোড়াকে set> এ ইনসার্ট করা হয়। এতে অনন্য পয়েন্টগুলো থাকে।
  • দুটি নেস্টেড ফর লুপ দিয়ে ভেক্টর ট্রাভার্স করা হয়।
  • দুটি পয়েন্টের x কোঅর্ডিনেটের যোগফল point_A-তে এবং y কোঅর্ডিনেটের যোগফল point_B-তে রাখা হয়।
  • যদি point_A এবং point_B উভয়ই সম সংখ্যা হয়, তবে মধ্যরেখা বিন্দুর শর্ত পরীক্ষা করা হয়।
  • যদি (point_A/2, point_B/2) জোড়াটি সেটে থাকে, তবে count বাড়ানো হয়।
  • শেষে count রিটার্ন করা হয়।
C++ কোড উদাহরণ
#include 
using namespace std;

int mid_point(vector> vec, int size){
    int count = 0;
    set> sets;
    for (int i = 0; i < size; i++){
        sets.insert(vec[i]);
    }
    for (int i = 0; i < size; i++){
        for (int j = i + 1; j < size; j++){
            int point_A = vec[i].first + vec[j].first;
            int point_B = vec[i].second + vec[j].second;
            if (point_A % 2 == 0 && point_B % 2 == 0){
                if (sets.find(make_pair(point_A / 2, point_B / 2)) != sets.end()){
                    count++;
                }
            }
        }
    }
    return count;
}

int main(){
    vector> vec = { { 9, 2 }, { 5, 2 }, { 1, 2 } };
    int size = vec.size();
    cout << "শর্ত পূরণকারী ট্রিপলেট জোড়ার সংখ্যা: " << mid_point(vec, size);
    return 0;
}
আউটপুট

উপরোক্ত কোড রান করলে নিচের আউটপুট मिलবে:

শর্ত পূরণকারী ট্রিপলেট জোড়ার সংখ্যা: 1
  1. C++-এ অ্যারেতে দেওয়া সমষ্টির ট্রিপলেট বের করা

  2. দেওয়া স্ট্রিংয়ের নন-ওভারল্যাপিং প্যালিনড্রোমিক সাবস্ট্রিং পেয়ারের সংখ্যা গণনা (C++)

  3. দেওয়া শর্ত পূরণকারী সাবসেট গণনা C++-এ

  4. C++-এ গ্রিডের মধ্যে নির্দিষ্ট দিকচালনের সম্ভাব্য মোভ সংখ্যা গণনা