हमें 2-D स्पेस पर N बिंदुओं का इनपुट दिया गया है। लक्ष्य इनपुट से बिंदुओं के ट्रिपलेट की संख्या ढूंढना है जैसे कि एक बिंदु अन्य दो के बीच की रेखा पर मध्य-बिंदु हो। यानी यदि ट्रिपलेट (A,B,C) है तो B, A और C का मध्य-बिंदु है (या A,B,C का कोई अन्य संयोजन)।
हम इसे वेक्टर में सभी बिंदुओं को <int,int> जोड़े के रूप में डालकर करेंगे। फिर इस वेक्टर के सभी जोड़ों को सेट में जोड़ेंगे। सेट से दो बिंदु लेकर जांचेंगे कि क्या उनके (x,y) निर्देशांकों का योग 2 से विभाजित करने पर उसी सेट में मौजूद है। यदि हां, तो ट्रिपलेट काउंट बढ़ाएंगे।
उदाहरण से समझते हैं
इनपुट
{ 1,2 }, { 4,2} , { 2,1 } , { 7,2 } N=4 जोड़े आउटपुट
दिए गए शर्त को पूरा करने वाले ट्रिपलेट जोड़े की संख्या: 1
व्याख्या
यहां {4,2}, {1,2} और {7,2} के बीच मध्य-बिंदु है। केवल 1 ऐसा ट्रिपलेट इनपुट
{ 1,2 }, { 4,2} , { 2,1 } , { 5,2 }, { 8,1} , {1,1} N=6 आउटपुट
दिए गए शर्त को पूरा करने वाले ट्रिपलेट जोड़े की संख्या: 1
व्याख्या
ऐसा कोई ट्रिपलेट मौजूद नहीं है
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण
हम <int,int> प्रकार के जोड़ों का एक वेक्टर लेते हैं।
प्रत्येक जोड़े में (x,y) निर्देशांक होते हैं।
फ़ंक्शन mid_point(vector<pair<int, int>> vec, int size) एक वेक्टर और उसका आकार लेता है और मध्य-बिंदु शर्त को पूरा करने वाले ट्रिपलेट की संख्या लौटाता है।
प्रारंभिक चर count को 0 से आरंभ करें ऐसे ट्रिपलेट के लिए।
वेक्टर के सभी जोड़ों को set<pair<int, int> > sets में डालें। इसमें सभी अद्वितीय बिंदु होंगे।
दो फॉर लूप का उपयोग करके वेक्टर को पार करें प्रत्येक जोड़े के लिए।
दोनों बिंदुओं के x निर्देशांकों का योग पूर्णांक point_A में और y निर्देशांकों का योग पूर्णांक point_B में संग्रहीत करें।
यदि point_A और point_B दोनों में ये योग सम हैं तो मध्य-बिंदु शर्त की जांच करें।
यदि जोड़ा (point_A/2, point_B/2) सेट में एक जोड़े के रूप में मौजूद है तो मध्य-बिंदु मौजूद है। ट्रिपलेट की संख्या बढ़ाएं।
अंत में count में ट्रिपलेट की संख्या होगी।
फॉर लूप के अंत में count को परिणाम के रूप में लौटाएं।
उदाहरण
#include <bits/stdc++.h> using namespace std; int mid_point(vector<pair<int, int>> vec, int size){ int count = 0; set<pair<int, int> > sets; for (int i = 0; i < size; i++){ sets.insert(vec[i]); } for (int i = 0; i < size; i++){ for (int j = i + 1; j < size; j++){ int point_A = vec[i].first + vec[j].first; int point_B = vec[i].second + vec[j].second; if (point_A % 2 == 0 && point_B % 2 == 0){ if (sets.find(make_pair(point_A / 2, point_B / 2)) != sets.end()){ count++; } } } } return count; } int main(){ vector<pair<int, int>> vec = { { 9, 2 }, { 5, 2 }, { 1, 2 } }; int size = vec.size(); cout<<"दिए गए शर्त को पूरा करने वाले ट्रिपलेट जोड़े (A, B, C) की संख्या: "<<mid_point(vec, size); } आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -
दिए गए शर्त को पूरा करने वाले ट्रिपलेट जोड़े (A, B, C) की संख्या: 1