কম্পিউটার

C++ এ রেখার প্রতিফলন


ধরুন আমাদের একটি 2D সমতলে n বিন্দু আছে, আমাদের পরীক্ষা করতে হবে y-অক্ষের সমান্তরাল কোনো রেখা আছে কি না যা প্রদত্ত বিন্দুগুলিকে প্রতিসাম্যিকভাবে প্রতিফলিত করে, অন্য কথায়, প্রদত্ত রেখার উপর সমস্ত বিন্দু প্রতিফলিত করার পর এমন কোনো রেখা আছে কিনা তা পরীক্ষা করতে হবে। মূল পয়েন্টের সেটটি প্রতিফলিত পয়েন্টগুলির সমান।

সুতরাং, যদি ইনপুট পয়েন্টের মত হয় =[[1,1],[-1,1]]

C++ এ রেখার প্রতিফলন

তাহলে আউটপুট সত্য হবে

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

  • এক সেট ঠিক আছে সংজ্ঞায়িত করুন

  • n :=পয়েন্টের আকার

  • minVal :=inf

  • maxVal :=-inf

  • আরম্ভ করার জন্য i :=0, যখন i

    • minVal :=সর্বনিম্ন minVal এবং পয়েন্ট[i, 0]

    • maxVal :=সর্বোচ্চ maxVal এবং পয়েন্ট[i, 0]

    • পয়েন্টগুলি [i] ঠিক আছে

      তে সন্নিবেশ করান
  • mid :=maxVal + minVal

  • আরম্ভ করার জন্য i :=0, যখন i

    • x :=পয়েন্ট[i, 0]

    • y :=পয়েন্ট[i, 1]

    • x :=মধ্য - x

    • যদি { x, y } ঠিক না থাকে, তাহলে −

      • ফেরত মিথ্যা

  • প্রত্যাবর্তন সত্য

উদাহরণ

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

#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;
      for (int i = 0; i < n; i++) {
         int x = points[i][0];
         int y = points[i][1];
         x = mid - x;
         if (!ok.count({ x, y }))
            return false;
      }
      return true;
   }
};
main(){
   Solution ob;
   vector<vector<int<> v = {{1,1},{-1,1}};
   cout << (ob.isReflected(v));
}

ইনপুট

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

আউটপুট

1

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

  2. C++ এ একটি লাইনে সর্বোচ্চ পয়েন্ট

  3. C++ এ মিরর প্রতিফলন

  4. একটি লাইন C++ এ একটি বৃত্ত স্পর্শ করে বা ছেদ করে কিনা তা পরীক্ষা করুন