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

बनाए जा सकने वाले कोऑर्डिनेट जोड़ों की संख्या ज्ञात करने के लिए C++ प्रोग्राम


मान लीजिए, हमें एक दो-आयामी तल पर 2n संख्या में कोऑर्डिनेट्स दिए गए हैं। 2n कोऑर्डिनेट्स को दो ऐरे coordA और coordB में विभाजित किया गया है। कोऑर्डिनेट्स को पूर्णांक जोड़े के रूप में दर्शाया गया है। अब हमें कोऑर्डिनेट जोड़े बनाने हैं जिनमें coordA से एक पॉइंट और coordB से एक पॉइंट होगा। हम जोड़े तभी बना सकते हैं जब coordA के पॉइंट का x कोऑर्डिनेट coordB के पॉइंट के x कोऑर्डिनेट से छोटा हो, और coordA के पॉइंट का y कोऑर्डिनेट coordB के पॉइंट के y कोऑर्डिनेट से छोटा हो। हमें बनाए जा सकने वाले जोड़ों की संख्या ढूंढनी है, और एक पॉइंट कई जोड़ों से संबंधित नहीं हो सकता।

इसलिए, यदि इनपुट इस तरह है: n = 3, coordsA = {{1, 3}, {2, 4}, {4, 3}}, coordsB = {{2, 2}, {4, 2}, {0, 2}}, तो आउटपुट 1 होगा।

एकमात्र जोड़ा जो बनाया जा सकता है वह है (1, 3) और (0, 2)।

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

Define an array chk of size: 100 initialized with 0 sort the array coordA sort the array coordB k := 0 for initialize i := n - 1, when i >= 0, update (decrease i by 1), do: for initialize j := 0, when j < n, update (increase j by 1), do: if chk[j] is same as 0 and first value of coordA[i] < second value of coordB[j] and second value of coordA[i] < first value of coordB[j], then: chk[j] := 1 (increase k by 1) Come out from the loop print(k)

उदाहरण

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

#include <bits/stdc++.h> using namespace std; const int INF = 1e9; #define N 100 void solve(int n, vector<pair<int,int>> coordA, vector<pair<int,int>>coordB){    int i, j, k;    int chk[100] = {0};    sort(coordA.begin(),coordA.end());    sort(coordB.begin(),coordB.end());    k = 0;    for(i = n - 1; i >= 0; i--) {       for(j = 0; j < n; j++) {          if(chk[j] == 0 && coordA[i].first < coordB[j].second && coordA[i].second < coordB[j].first) {             chk[j] = 1;             k++;             break;          }       }    }    cout<< k; } int main() {    int n = 3;    vector<pair<int,int>> coordsA = {{1, 3}, {2, 4}, {4, 3}};    vector<pair<int,int>> coordsB = {{2, 2}, {4, 2}, {0, 2}};    solve(n, coordsA, coordsB);    return 0; }

इनपुट

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

आउटपुट

1

  1. ग्रिड में रोशन सेल्स की संख्या ज्ञात करने का C++ प्रोग्राम ग्रिड में रोशन सेल्स की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए h × w आयाम का एक ग्रिड दिया गया है। ग्रिड की सेल्स में बल्ब या बाधाएँ हो सकती हैं। एक बल्ब सेल स्वयं और अपने दाएँ, बाएँ, ऊपर, नीचे की सेल्स को रोशन करता है। प्रकाश सेल्स के माध्यम से चमकता है जब तक कि कोई बाधा सेल इसे न रोक दे। बाधा सेल न तो रोशन हो सकती है और न ही प्रकाश को गुजरने देती ह

  1. दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1

  1. ग्राफ से घटाए जा सकने वाले अधिकतम स्कोर की मात्रा ज्ञात करने का C++ प्रोग्राम ग्राफ से घटाए जा सकने वाले अधिकतम स्कोर की मात्रा ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक भारित, निदेश रहित ग्राफ दिया गया है। ग्राफ का स्कोर ग्राफ में सभी एज भारों का योग है। एज भार ऋणात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाए तो ग्राफ का स्कोर बढ़ जाता है। हमें ग्राफ को संबद्ध रखते हुए एज हटाकर ग्राफ के स्कोर को न्यूनतम करना है। हमें घटाए जा सकन