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

n पूर्णांक युग्म में न्यूनतम अंतर मान ढूंढने के लिए C++ प्रोग्राम


मान लीजिए, हमें दो ऐरे a और b दिए गए हैं जिनमें क्रमशः n और m मान हैं। हमें दो ऐरे से मानों का उपयोग करके n या m संख्या के युग्म (जो भी न्यूनतम है) बनाने हैं। एक युग्म में ऐरे a से एक मान और ऐरे b से दूसरा मान होना चाहिए। हमें युग्मों को इस तरह बनाना है ताकि युग्म में मानों का अंतर न्यूनतम और समान हो। हम मान को आउटपुट के रूप में प्रिंट करते हैं।

उदाहरण के लिए, यदि इनपुट n = 4, m = 4, a = {2, 3, 4, 7}, b = {3, 4, 6, 5} है, तो आउटपुट 1 होगा।

बनाए जा सकने वाले युग्म हैं:

(3, 4), (4, 5), (7, 6), (2, 3).

सभी युग्मों में मानों का अंतर 1 है।

चरण

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

ऐरे a को सॉर्ट करें 0 से प्रारंभ एक ऐरे s1 परिभाषित करें 0 से प्रारंभ एक ऐरे s2 परिभाषित करें i := 1 से n-1 तक, i := i + 2, करें: s1 के अंतिम तत्व + a[i] - a[i - 1] को s1 के अंत में डालें i := 2 से n-1 तक, i := i + 2, करें: s2 के अंतिम तत्व + a[i] - a[i - 1] को s2 के अंत में डालें ans := infinity b के प्रत्येक मान w के लिए, करें: diff := w से कम नहीं ऐरे a में पहला तत्व - a का पहला मान sub := s1[diff / 2] का अंतिम तत्व + s2 ans := ans और sub का न्यूनतम print(ans)

उदाहरण

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

#include <bits/stdc++.h> using namespace std; const int INF = 1e9; void solve(int n, int m, vector<int> a, vector<int> b){    sort(a.begin(), a.end());    vector<int> s1 = {0};    vector<int> s2 = {0};    for (int i = 1; i < n; i += 2)       s1.push_back(a[i] - a[i - 1] + s1.back());    for (int i = 2; i < n; i += 2)       s2.push_back(a[i] - a[i - 1] + s2.back());    int ans = INF;    for (const auto & w : b) {       int diff = lower_bound(a.begin(), a.end(), w) - a.begin();       int sub = s1[diff / 2] + s2.back() - s2[diff / 2] + abs(a[diff / 2 * 2] - w);     ans = min(ans, sub);    } cout << ans << endl; } int main() { int n = 4, m = 4; vector<int> a = {2, 3, 4, 7}, b = {3, 4, 6, 5}; solve(n, m, a, b); return 0; }

इनपुट

4, 4, {2, 3, 4, 7}, {3, 4, 6, 5}

आउटपुट

1

  1. ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स वाला एक ग्राफ दिया गया है। वर्टेक्स 1 से n तक संख्याबद्ध हैं और edges सरणी में दी गई एज्स से जुड़े हैं। प्रत्येक वर्टेक्स का एक x मान है जो 1 से n के बीच होता है, यह values सरणी में दिया गया है। हमें ग्राफ में सुपर वर्टेक्स खोजने हैं। एक वर्टेक्स i को सुपर वर्टेक्स कहा जाता है

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

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

  1. - C++ प्रोग्राम किसी भी बीजगणितीय अभिव्यक्ति का न्यूनतम मान खोजने के लिए

    यह किसी भी बीजगणितीय अभिव्यक्ति का न्यूनतम मान खोजने के लिए एक C++ प्रोग्राम है। (x1 + x2 + ... + xa) * (y1 + y2 + ... + yb) रूप का एक बीजगणितीय अभिव्यक्ति और (a + b) इंटीजर्स दिए गए हैं। a नंबर्स और शेष b नंबर्स के सभी संभावित संयोजनों पर विचार करें और उनके मानों की गणना करें, जिससे न्यूनतम मान प्