मान लीजिए हमारे पास n भुजाओं वाला एक नियमित बहुभुज है जिसे आकार n के बाइनरी स्ट्रिंग द्वारा दर्शाया गया है। शीर्ष या तो नीले (0) या लाल (1) रंग के हो सकते हैं। उन्हें घड़ी की दिशा में रंगा गया है। हमें उन समद्विबाहु त्रिभुजों की संख्या गिननी है जिनके शीर्ष नियमित बहुभुज के शीर्ष हैं, और उनके रंग समान हैं।
उदाहरण के लिए, यदि इनपुट polygon = "111010" है, तो आउटपुट 2 होगा क्योंकि

दो त्रिभुज ACE और AFE हैं।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- all() नामक एक फंक्शन परिभाषित करें। यह n लेगा
- यदि n mod 2, 1 के समान है, तो no := n*(n-1) /2
- अन्यथा, no := n*(n/2-1)
- यदि n mod 3, 0 के समान है, तो no := no - n/3*2
- no लौटाएं
- non() नामक एक फंक्शन परिभाषित करें। यह a, n लेगा
- यदि n mod 2, 1 के समान है, तो
- s0 := 0, s1 := 0
- i := 0
- जब तक i < n, करें
- यदि 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
- i := 0
- जब तक i < n, करें
- यदि 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
- i := 0
- जब तक i < n, करें
- यदि a[i], '0' के समान है, तो s00 := s00 + 1
- अन्यथा s01 := s01 + 1
- i := i + 2
- i := 1
- जब तक i < n, करें
- यदि a[i], '0' के समान है, तो s10 := s10 + 1
- अन्यथा s11 := s11 + 1
- i := i + 2
- s := s + s00 * s01 * 8
- s := s + s10 * s11 * 8
- s := s + s00 * s11 * 4
- s := s + s10 * s01 * 4
- n1 := n/2
- i := 0
- जब तक i < n, करें
- यदि a[i], a[(i + n1)mod n] के समान नहीं है, तो
- s := s - 2
- i := i + 1
- यदि a[i], a[(i + n1)mod n] के समान नहीं है, तो
- यदि n mod 3, 0 के समान है, तो
- n1 := n/3
- n2 := n1*2
- i := 0
- जब तक i < n, करें
- यदि 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] के समान नहीं है, तो
- s/2 लौटाएं
- मुख्य विधि से, निम्न करें:
- n := polygon का आकार
- no := all(n) - non(polygon, n) /2
- no लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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))इनपुट
"111010"
आउटपुट
2
- यदि n mod 2, 1 के समान है, तो