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

परफेक्ट आयत - C++


मान लीजिए हमारे पास N अक्ष-संरेखित आयत हैं, हमें जांचना होगा कि क्या वे सभी मिलकर एक आयताकार क्षेत्र का सटीक कवर बनाते हैं या नहीं। यहां प्रत्येक आयत को निचले-बाएं बिंदु और ऊपरी-दाएं बिंदु के रूप में दर्शाया गया है। तो एक यूनिट वर्ग को [1,1,2,2] के रूप में दर्शाया गया है। (निचला-बाएं बिंदु (1, 1) है और ऊपरी-दाएं बिंदु (2, 2) है)।

तो, यदि इनपुट rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]] जैसा है, तो आउटपुट true होगा क्योंकि सभी 5 आयत मिलकर एक आयताकार क्षेत्र का सटीक कवर बनाते हैं।

परफेक्ट आयत - C++

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −

  • एक सेट visited परिभाषित करें

  • area := 0

  • x2 := -inf, x1 := inf

  • y2 := -inf, y1 := inf

  • दिए गए रेक्टेंगल्स की सूची में प्रत्येक r के लिए −

    • x1 := r[0] और x1 का न्यूनतम

    • x2 := r[2] और x2 का अधिकतम

    • y1 := r[1] और y1 का न्यूनतम

    • y2 := r[3] और y2 का अधिकतम

    • area := area + ((r[2] - r[0]) * (r[3] - r[1]))

    • s1 := r[0] को r[1] के साथ जोड़ें

    • s2 := r[0] को r[3] के साथ जोड़ें

    • s3 := r[2] को r[3] के साथ जोड़ें

    • s4 := r[2] को r[1] के साथ जोड़ें

    • यदि s1 visited में है, तो −

      • visited से s1 हटाएं

    • अन्यथा

      • visited में s1 डालें

    • यदि s2 visited में है, तो −

      • visited से s2 हटाएं

    • अन्यथा

      • visited में s2 डालें

    • यदि s3 visited में है, तो −

      • visited से s3 हटाएं

    • अन्यथा

      • visited में s3 डालें

    • यदि s4 visited में है, तो −

      • visited से s4 हटाएं

    • अन्यथा

      • visited में s4 डालें

  • s1 := x1 और y1 को जोड़ें

  • s2 := x2 और y1 को जोड़ें

  • s3 := x1 और y2 को जोड़ें

  • s4 := x2 और y2 को जोड़ें

  • यदि s1, s2, s3, s4 सभी visited में नहीं हैं, तो

    • false लौटाएं

  • true लौटाएं जब area, ((x2 - x1) * (y2 - y1)) के समान हो

उदाहरण  

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −

#include <bits/stdc++.h> using namespace std; class Solution { public:    bool isRectangleCover(vector<vector<int>> &re) {       unordered_set<string> visited;       int area = 0;       int x2 = INT_MIN;       int x1 = INT_MAX;       int y2 = INT_MIN;       int y1 = INT_MAX;       for (auto &r : re) {          x1 = min(r[0], x1);          x2 = max(r[2], x2);          y1 = min(r[1], y1);          y2 = max(r[3], y2);          area += (r[2] - r[0]) * (r[3] - r[1]);          string s1 = to_string(r[0]) + to_string(r[1]);          string s2 = to_string(r[0]) + to_string(r[3]);          string s3 = to_string(r[2]) + to_string(r[3]);          string s4 = to_string(r[2]) + to_string(r[1]);          if (visited.count(s1)) {             visited.erase(s1);          }          else             visited.insert(s1);          if (visited.count(s2)) {             visited.erase(s2);          }          else             visited.insert(s2);          if (visited.count(s3)) {             visited.erase(s3);          }          else             visited.insert(s3);          if (visited.count(s4)) {             visited.erase(s4);          }          else             visited.insert(s4);          }          string s1 = to_string(x1) + to_string(y1);          string s2 = to_string(x2) + to_string(y1);          string s3 = to_string(x1) + to_string(y2);          string s4 = to_string(x2) + to_string(y2);          if (!visited.count(s1) || !visited.count(s2) || !visited.count(s3) || !visited.count(s4) || visited.size() != 4)             return false;          return area == (x2 - x1) * (y2 - y1);       } }; main() {    Solution ob;    vector<vector<int>> v = {{1, 1, 3, 3}, {3, 1, 4, 2}, {3, 2, 4, 4}, {1, 3, 2, 4}, {2, 3, 3, 4}};    cout << (ob.isRectangleCover(v)); }

इनपुट

{{1, 1, 3, 3}, {3, 1, 4, 2}, {3, 2, 4, 4}, {1, 3, 2, 4}, {2, 3, 3, 4}}

आउटपुट

1

  1. C++ में आयत क्षेत्रफल गणना C++ में आयत क्षेत्रफल गणना

    मान लीजिए हम 2D तल में दो समकोणीय आयतों द्वारा कवर किए गए कुल क्षेत्रफल को ढूंढना चाहते हैं। प्रत्येक आयत को उसके निचले बाएं कोने और ऊपरी दाएं कोने द्वारा परिभाषित किया जाता है।हल करने के चरण= H या D <= F, तो(C - A) * (D - B) + (G - E) * (H - F) वापस करेंएक सरणी h परिभाषित करें, इसमें A, C, E, G डाल

  1. C++ में बाइनरी ट्री नोड्स को वैलिडेट करना C++ में बाइनरी ट्री नोड्स को वैलिडेट करना

    मान लीजिए हमारे पास 0 से n-1 तक नंबरेड n बाइनरी ट्री नोड्स हैं जहां नोड i के दो चिल्ड्रन leftChild[i] और rightChild[i] हैं, हमें true कहना है यदि और केवल यदि सभी दिए गए नोड्स ठीक एक वैलिड बाइनरी ट्री बनाते हैं। जब नोड i का कोई लेफ्ट चाइल्ड नहीं होता तो leftChild[i] -1 के बराबर होगा, इसी तरह राइट चा

  1. C++ में मध्य बिंदुओं का उपयोग करके आयत के कोने ढूंढना C++ में मध्य बिंदुओं का उपयोग करके आयत के कोने ढूंढना

    मान लीजिए हमारे पास एक आयत ABCD है, लेकिन हमारे पास केवल मध्य बिंदुओं P और Q के निर्देशांक हैं, और आयत की लंबाई L है।हमारा कार्य P और Q के निर्देशांक, और भुजा की लंबाई L का उपयोग करके A, B, C और D के निर्देशांक ढूंढना है। उदाहरण के लिए, यदि P (1, 0) है, और Q (1, 2) है, और L 2 है, तो A, B, C, D क्रमश