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

पायथन में पहले n प्राकृतिक संख्याओं के क्रमपरिवर्तन से जादू सेटों की संख्या खोजने का कार्यक्रम

मान लीजिए कि हमारे पास पहले n प्राकृतिक संख्याओं के साथ एक सरणी A है, और सरणी A का एक क्रमपरिवर्तन P{p1, p2, ... pn} है। हमें यह जांचना है कि कितने मैजिक सेट हैं। क्रमचय को जादू का सेट कहा जाता है, यदि यह इन कुछ नियमों को पूरा करता है -

  • यदि हमारे पास k है, तो स्थिति a[1], a[2], ... a[k] में अवयव उनके आसन्न तत्वों से कम हैं [P[a[i] - 1]> P[a [i]] <पी[ए[i] + 1]]
  • यदि हमारे पास एल है, तो स्थिति बी [1], बी [2], ... बी [एल] में तत्व उनके आसन्न तत्वों से अधिक हैं [पी [बी [i] - 1] <पी [बी [ i]]> पी[बी[i] + 1]]

इसलिए, यदि इनपुट n =4 k =1 l =1 k_vals =[2] l_vals =[3] जैसा है, तो आउटपुट 5 होगा क्योंकि:N =4, a[1] =2 और b[1] =3. तो पांच क्रमपरिवर्तन हैं [2,1,4,3], [3,2,4,1], [4,2,3,1], [3,1,4,2], [4 ,1,3,2].

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

  • p :=10^9+7
  • F :=n+2 आकार की एक सरणी और 0 से भरें
  • k_vals में प्रत्येक a के लिए, करें
    • यदि F[a - 1] 1 है या F[a + 1] 1 है, तो
      • यदि F[a - 1] 1 है या F[a + 1] 1 है, तो
        • p :=शून्य
      • F[a] :=1
  • l_vals में प्रत्येक b के लिए, करें
    • यदि F[b] 1 है या F[b - 1] -1 है या F[b + 1] -1 है, तो
      • p :=शून्य
    • एफ[बी] :=-1
  • यदि p शून्य के समान है, तो
    • वापसी 0
  • अन्यथा,
    • A :=आकार n+1 की एक सरणी और 0 से भरें
    • B :=n+1 आकार की एक सरणी और 0 से भरें
    • FF:=आकार n+1 की एक सरणी और शून्य से भरें
    • 1 से n की श्रेणी में i के लिए, करें
      • FF[i] :=F[i] - F[i - 1]
    • ए[1] :=1
    • 2 से n की श्रेणी में i के लिए, करें
      • जे के लिए 1 से i की श्रेणी में, करें
        • अगर एफएफ[i]> 0, तो
          • B[j] :=(B[j-1] + A[j-1]) mod p
        • अन्यथा जब FF[i] <0, तब
          • B[j] :=(B[j-1] + A[i-1] - A[j-1]) mod p
        • अन्यथा,
          • B[j] :=(B[j-1] + A[i-1]) mod p
      • ए और बी स्वैप करें
    • वापसी A[n]

उदाहरण

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

def solve(n, k, l, k_vals, l_vals):
   p = 10**9+7
   F = [0] * (n + 2)
   for a in k_vals:
      if F[a - 1] == 1 or F[a + 1] == 1:
         p = None
      F[a] = 1
   for b in l_vals:
      if F[b] == 1 or F[b - 1] == -1 or F[b + 1] == -1:
         p = None
      F[b] = -1
   if p == None:
      return 0
   else:
      A = [0] * (n + 1)
      B = [0] * (n + 1)
      FF = [None] * (n + 1)
      for i in range(1, n + 1):
         FF[i] = F[i] - F[i - 1]
      A[1] = 1
      for i in range(2, n + 1):
         for j in range(1, i + 1):
            if FF[i] > 0:
               B[j] = (B[j - 1] + A[j - 1]) % p
            elif FF[i] < 0:
               B[j] = (B[j - 1] + A[i - 1] - A[j - 1]) % p
            else:
               B[j] = (B[j - 1] + A[i - 1]) % p
         A, B = B, A
      return A[n]

n = 4
k = 1
l = 1
k_vals = [2]
l_vals = [3]
print(solve(n, k, l, k_vals, l_vals))

इनपुट

4, 1, 1, [2], [3]

इनपुट

5

  1. पायथन में पहले से अंतिम नोड तक प्रतिबंधित पथों की संख्या खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष भारित जुड़ा हुआ ग्राफ है। ग्राफ में n नोड्स होते हैं और उन्हें 1 से n तक लेबल किया जाता है। प्रारंभ से अंत तक का पथ [z0, z1, z2, ..., zk] जैसे नोड्स का एक क्रम है, यहां z0 प्रारंभ नोड है और zk अंत नोड है और zi और zi+1 के बीच एक किनारा है जहां 0 <=मैं dist(zi+1)

  1. पहले n प्राकृतिक संख्याओं के घन योग के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन −एक इनपुट n को देखते हुए, हमें श्रृंखला के योग 13 + 23 + 33 + 43 + …….+ n3 को n-वें पद तक प्रिंट करने की आवश्यकता है। यहां हम समस्या के समाधान तक पहुंचने के लिए दो दृष्टिकोणों पर चर्चा करेंगे -

  1. पायथन में रिकर्सन का उपयोग करके प्राकृतिक संख्याओं का योग कैसे प्राप्त करें?

    यदि कोई फ़ंक्शन स्वयं को कॉल करता है, तो उसे पुनरावर्ती फ़ंक्शन कहा जाता है। इसे अनंत लूप में गिरने से रोकने के लिए, रिकर्सिव कॉल को सशर्त स्टेटमेंट में रखा जाता है। निम्नलिखित प्रोग्राम उपयोगकर्ता से इनपुट के रूप में एक संख्या को स्वीकार करता है और इसे rsum() फ़ंक्शन के लिए तर्क के रूप में भेजता है