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

सी ++ में क्षैतिज और लंबवत कटौती के बाद केक के टुकड़े का अधिकतम क्षेत्रफल

मान लीजिए कि हमारे पास ऊंचाई h और चौड़ाई w के साथ एक आयताकार केक है, हमारे पास पूर्णांक क्षैतिज कट और लंबवत कट के दो सरणी भी हैं जहां क्षैतिज कट [i] आयताकार केक के शीर्ष से क्षैतिज कट तक की दूरी का प्रतिनिधित्व करता है और इसी तरह, लंबवत कट [जे] आयताकार केक के बाईं ओर से jth वर्टिकल कट तक की दूरी को दर्शाता है।

केक के एक टुकड़े का अधिकतम क्षेत्रफल ज्ञात करने के लिए जब हम इसे क्षैतिज कट और ऊर्ध्वाधर कट में प्रदान की गई प्रत्येक क्षैतिज और ऊर्ध्वाधर स्थिति में काटते हैं। उत्तर बड़ा हो सकता है, इसलिए यह मॉड्यूल 10^9 + 7 लौटाएं।

इसलिए, यदि इनपुट h =5, w =4, हॉरिज़ॉन्टलकट्स =[1,2,4], वर्टिकलकट्स =[1,3]

जैसा है।

तो आउटपुट 4 होगा, क्योंकि उस इमेज से हम दिए गए आयताकार केक को समझ सकते हैं।

लाल रेखाएँ क्षैतिज और ऊर्ध्वाधर कट हैं। केक काटने के बाद, केक के हरे टुकड़े का क्षेत्रफल अधिकतम होता है।

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

  • फ़ंक्शन mul() को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी ((एक मॉड एम) * (बी मॉड एम)) मॉड एम

  • मुख्य विधि से हम h, w, एक सरणी hh, एक सरणी vv,

    . लेंगे
  • सरणी hh और vv को सॉर्ट करें

  • एचएच के पहले तत्व को इंडेक्स 0 पर एचएच में डालें

  • hh के अंत में h डालें

  • vv का पहला तत्व डालें, सूचकांक 0 पर vv में

  • vv के अंत में w डालें

  • ए:=0, बी:=0

  • इनिशियलाइज़ i के लिए:=1, जब i

    • a :=अधिकतम a और hh[i] - hh[i - 1]

  • इनिशियलाइज़ i :=1 के लिए, जब i

    • b :=अधिकतम b और vv[i] - vv[i - 1]

  • वापसी मूल (ए, बी)

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
typedef long long int lli;
class Solution {
public:
   lli mul(lli a, lli b){
      return ((a % mod) * (b % mod)) % mod;
   }
   int maxArea(int h, int w, vector<int>& hh, vector<int>& vv) {
      sort(hh.begin(), hh.end());
      sort(vv.begin(), vv.end());
      hh.insert(hh.begin(), 0);
      hh.push_back(h);
      vv.insert(vv.begin(), 0);
      vv.push_back(w);
      int a = 0;
      int b = 0;
      for (int i = 1; i < hh.size(); i++) {
         a = max(a, hh[i] - hh[i - 1]);
      }
      for (int i = 1; i < vv.size(); i++) {
         b = max(b, vv[i] - vv[i - 1]);
      }
      return mul(a, b);
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,4}, v1 = {1,3};
   cout << (ob.maxArea(5,4,v,v1));
}

इनपुट

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

आउटपुट

4

  1. C++ परिमाप और Varignon के समांतर चतुर्भुज का क्षेत्रफल

    Varignons Parallelogram एक चतुर्भुज की प्रत्येक भुजा के मध्य बिंदुओं को मिलाने से बनता है। मान लीजिए कि हमारे पास एक चतुर्भुज ABCD है। प्रत्येक पक्ष के मध्य बिंदु P, Q, R और S हैं। यदि हम सभी मध्य बिंदुओं को जोड़ते हैं, तो यह हमेशा एक समांतर चतुर्भुज PQRS बनाएगा जिसे Varignons Parallelogram के रूप म

  1. सभी को बोनस देने के बाद उत्तीर्ण होने वाले अधिकतम छात्र और C++ प्रोग्राम में 100 से अधिक अंक नहीं

    इस समस्या में, हमें n आकार का एक सरणी stu[] दिया जाता है जो कक्षा में छात्रों के अंकों को दर्शाता है। प्रत्येक छात्र के लिए, अधिकतम अंक 100 है और एक छात्र को परीक्षा पास करने के लिए 50 अंक चाहिए। हमारा काम हर किसी को बोनस देने और 100 से अधिक अंक नहीं देने के बाद उत्तीर्ण होने वाले अधिकतम छात्रों को

  1. C++ में N कटने के बाद वृत्त के टुकड़ों को गिनें

    हमें एक पूर्णांक N दिया गया है जो 2D-वृत्त पर लगाए गए कटों की संख्या को दर्शाता है। प्रत्येक वृत्त वृत्त को दो भागों में विभाजित करता है। लक्ष्य N कट के बाद वृत्त के टुकड़ों को खोजना है। टुकड़ों की संख्या =2 * नहीं। कटौती की आइए उदाहरणों से समझते हैं। इनपुट -एन=1 आउटपुट - सर्कल के टुकड़े:2 स्पष