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

C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা

এক ২D প্লেনে n সংখ্যক পয়েন্ট দেওয়া আছে। যাচাই করতে হবে Y-অক্ষের সমান্তরাল কোনো লাইন আছে কিনা যাতে সকল পয়েন্টগুলো সেটা দিয়ে প্রতিফলিত করলে পয়েন্ট সেটটি অপরিবর্তিত থাকে। অর্থাৎ, প্রতিটি পয়েন্টের প্রতিফলিত পয়েন্টও সেটে উপস্থিত থাকতে হবে।

উদাহরণ

ইনপুট: points = [[1,1],[-1,1]]

C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা

আউটপুট: true (লাইন x=0 দিয়ে প্রতিফলন সেট অপরিবর্তিত রাখে)।

সমাধানের পদ্ধতি

  1. সকল পয়েন্ট একটি সেট ok-এ রাখুন।
  2. সকল পয়েন্টের x-কোঅর্ডিনেটের মিনিমাম (minVal) এবং ম্যাক্সিমাম (maxVal) বের করুন।
  3. প্রতিফলন লাইন হবে x = (minVal + maxVal) / 2। সমতুল্য ভাবে, প্রতিটি পয়েন্ট (x, y) এর জন্য প্রতিফলিত পয়েন্ট হবে (minVal + maxVal - x, y)।
  4. প্রতিটি পয়েন্টের জন্য প্রতিফলিত পয়েন্ট সেট ok-এ আছে কিনা চেক করুন। কোনো একটিও না থাকলে false।
  5. সব পাস করলে true।

C++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    bool isReflected(vector<vector<int>>& points) {
        set<vector<int>> ok;
        int n = points.size();
        int minVal = INT_MAX;
        int maxVal = INT_MIN;
        
        for (int i = 0; i < n; i++) {
            minVal = min(minVal, points[i][0]);
            maxVal = max(maxVal, points[i][0]);
            ok.insert(points[i]);
        }
        
        int mid = maxVal + minVal; // 2 * reflection line x-coordinate
        for (int i = 0; i < n; i++) {
            int x = points[i][0];
            int y = points[i][1];
            x = mid - x; // reflected x
            if (!ok.count({x, y}))
                return false;
        }
        return true;
    }
};

int main() {
    Solution ob;
    vector<vector<int>> v = {{1,1},{-1,1}};
    cout << (ob.isReflected(v));
    return 0;
}

ইনপুট

{{1,1},{-1,1}}

আউটপুট

1
  1. C++-এ ডায়াগোনাল ট্রায়ভার্স II

  2. C++-এ একটি রেখায় সর্বোচ্চ পয়েন্ট (Max Points on a Line)

  3. C++-এ মিরর রিফ্লেকশন সমস্যা সমাধান

  4. C++-এ একটি রেখা বৃত্তকে স্পর্শ করে কিনা বা ইন্টারসেক্ট করে কিনা চেক করা