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

আউটপুট: true (লাইন x=0 দিয়ে প্রতিফলন সেট অপরিবর্তিত রাখে)।
সমাধানের পদ্ধতি
- সকল পয়েন্ট একটি সেট
ok-এ রাখুন। - সকল পয়েন্টের x-কোঅর্ডিনেটের মিনিমাম (
minVal) এবং ম্যাক্সিমাম (maxVal) বের করুন। - প্রতিফলন লাইন হবে
x = (minVal + maxVal) / 2। সমতুল্য ভাবে, প্রতিটি পয়েন্ট(x, y)এর জন্য প্রতিফলিত পয়েন্ট হবে(minVal + maxVal - x, y)। - প্রতিটি পয়েন্টের জন্য প্রতিফলিত পয়েন্ট সেট
ok-এ আছে কিনা চেক করুন। কোনো একটিও না থাকলেfalse। - সব পাস করলে
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