मान लीजिए कि हमारे पास n भुजाओं वाला एक नियमित बहुभुज है, जिसे n आकार के बाइनरी स्ट्रिंग के रूप में दर्शाया गया है। शीर्षों को या तो नीले (0) या लाल (1) में रंगा जा सकता है। वे दक्षिणावर्त दिशा में रंगीन होते हैं हमें समद्विबाहु त्रिभुजों की संख्या गिननी होती है जिनके शीर्ष सम बहुभुज के शीर्ष होते हैं और उनके रंग समान होते हैं।
इसलिए, यदि इनपुट बहुभुज ="111010" जैसा है, तो आउटपुट 2 होगा क्योंकि
दो त्रिभुज ACE और AFE हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें all() । इसमें n . लगेगा
- यदि n mod 2 1 के समान है, तो नहीं :=n*(n-1) /2
- अन्यथा, नहीं:=n*(n/2-1)
- यदि n mod 3 0 के समान है, तो नहीं:=नहीं - n/3*2
- वापसी संख्या
- एक फ़ंक्शन को परिभाषित करें non() । इसमें एक,n . लगेगा
- यदि n mod 2 1 के समान है, तो
- s0 :=0, s1 :=0
- मैं :=0
- जबकि मैं
- यदि a[i] '0' के समान है, तो s0 :=s0 + 1
- अन्यथा s1 :=s1 + 1
- i :=i + 1
- s :=s0*s1*6
- यदि n mod 3 0 के समान है, तो
- n1 :=n/3
- n2 :=n1*2
- मैं :=0
- जबकि मैं
- यदि a[i] a[(i+n1)mod n] के समान नहीं है, तो
- s :=s - 2
- अगर a[i] a[(i+n2)mod n] के समान नहीं है, तो
- s :=s - 2
- i :=i + 1
- यदि a[i] a[(i+n1)mod n] के समान नहीं है, तो
- s00:=0, s01:=0, s10:=0, s11:=0, s:=0
- मैं :=0
- जबकि मैं
- यदि a[i] '0' के समान है, तो, s00:=s00 + 1
- अन्यथा s01:=s01 + 1
- i :=i + 2
- s :=s - 2
- n1 :=n/3
- n2 :=n1*2
- मैं :=0
- जबकि मैं
- यदि a[i] a[(i+n1)mod n] के समान नहीं है, तो
- s :=s - 2
- अगर a[i] a[(i+n2)mod n] के समान नहीं है, तो
- s :=s - 2
- i :=i + 1
- यदि a[i] a[(i+n1)mod n] के समान नहीं है, तो
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def all(n): if n % 2 == 1: no = n*(n-1)/2 else: no = n*(n/2-1) if n % 3 == 0: no -= n/3*2 return no def non(a,n): if n % 2 == 1: s0 = s1 = 0 i = 0 while i < n: if a[i] == '0': s0 += 1 else: s1 += 1 i += 1 s = s0*s1*6 if n % 3 == 0: n1 = n/3 n2 = n1*2 i = 0 while i<n: if a[i] != a[int((i+n1)%n)]: s -= 2 if a[i] != a[int((i+n2)%n)]: s -= 2 i += 1 else: s00 = s01 = s10 = s11 = s = 0 i = 0 while i <n: if a[i] == '0': s00 += 1 else: s01 += 1 i += 2 i = 1 while i < n: if a[i] == '0': s10 += 1 else: s11 += 1 i += 2 s += s00 * s01 * 8 s += s10 * s11 * 8 s += s00 * s11 * 4 s += s10 * s01 * 4 n1 = n/2 i = 0 while i < n: if a[i] != a[int((i + n1)%n)]: s -= 2 i += 1 if n % 3 == 0: n1 = n/3 n2 = n1*2 i = 0 while i < n: if a[i] != a[int((i+n1)%n)]: s -= 2 if a[i] != a[int((i+n2)%n)]: s -= 2 i += 1 return s/2 def solve(polygon): n = len(polygon) no = all(n) - non(polygon,n)/2 return int(no) polygon = "111010" print(solve(polygon))
इनपुट
1, 1000
आउटपुट
2