Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें


समस्या विवरण

मान लीजिए हमारे पास 2D तल पर n बिंदु हैं, हमें जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से प्रतिबिंबित करती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो सभी बिंदुओं को दी गई रेखा पर प्रतिबिंबित करने के बाद मूल बिंदुओं का समुच्चय प्रतिबिंबित बिंदुओं के समान ही रहता है।

उदाहरण के लिए, यदि इनपुट points = [[1,1],[-1,1]] है:

C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें

तो आउटपुट true होगा।

समाधान दृष्टिकोण

मध्य रेखा की गणना करके सेट-आधारित दृष्टिकोण:

  1. एक सेट ok परिभाषित करें
  2. n := points का आकार
  3. minVal := अनंत, maxVal := -अनंत
  4. प्रत्येक बिंदु के लिए:
    • minVal := min(minVal, points[i][0])
    • maxVal := max(maxVal, points[i][0])
    • points[i] को ok में डालें
  5. mid := maxVal + minVal
  6. प्रत्येक बिंदु के लिए:
    • x := points[i][0], y := points[i][1]
    • x := mid - x
    • यदि {x, y} ok में नहीं है, तो false लौटाएं
  7. 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; 
        
        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; 
    } 
}; 

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++ में एक रेखा पर अधिकतम बिंदु C++ में एक रेखा पर अधिकतम बिंदु

    मान लीजिए हमारे पास एक 2D तल है। हमें उन अधिकतम बिंदुओं की संख्या ढूंढनी है जो एक ही सीधी रेखा पर स्थित हैं। तो यदि बिंदु इस तरह हैं -तो 4 बिंदु हैंइसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -n := बिंदुओं की संख्या, यदि n < 3, तो n लौटाएंans := 2i को 1 से n - 1 तक की रेंज मेंcount := 0इं

  1. C++ में मिरर रिफ्लेक्शन C++ में मिरर रिफ्लेक्शन

    मान लीजिए एक विशेष वर्ग कमरा है जिसकी चारों दीवारों पर दर्पण लगे हैं। दक्षिण-पश्चिम कोने को छोड़कर प्रत्येक कोने में रिसेप्टर्स हैं। इन्हें 0, 1, और 2 के रूप में संख्यांकित किया गया है। अब वर्ग कमरे की दीवारों की लंबाई p है, और दक्षिण-पश्चिम कोने से एक लेजर किरण पूर्वी दीवार पर 0th रिसेप्टर से दूरी

  1. C++ में रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है या बाहर है जांचें C++ में रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है या बाहर है जांचें

    समस्या विवरण एक वृत्त (केंद्र h,k और त्रिज्या r) और रेखा (ax+by+c=0) दी गई है। जांचें कि रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है, या बाहर है। विधि केंद्र से रेखा की लंबवत दूरी P निकालें: P = |ah + bk + c| / √(a²+b²) P की त्रिज्या r से तुलना करें: r → बाहर P = r → स्पर्श करती है