ধরুন আমাদের একটি অ্যারে রঙ আছে, একটি নিয়মিত এন-গনের জন্য রং প্রতিনিধিত্ব করে। এখানে এই n-gon এর প্রতিটি শীর্ষবিন্দু প্রদত্ত অ্যারেতে উপস্থিত n ভিন্ন রঙের একটি দিয়ে এলোমেলোভাবে রঙিন ছিল। আমাদের বহুভুজ শীর্ষবিন্দুর বিশেষ উপসেটের সংখ্যা খুঁজে বের করতে হবে, যেমন এই উপসেটগুলি এই শর্তগুলি পূরণ করে -
- সাবসেটের আকার কমপক্ষে দুটি হতে হবে।
- যদি আমরা বহুভুজ থেকে উপসেটে উপস্থিত শীর্ষবিন্দুগুলি সরিয়ে ফেলি (সেই শীর্ষবিন্দুগুলির সংলগ্ন প্রান্তগুলিও সরানো হবে), তবে অবশিষ্ট শীর্ষবিন্দু এবং প্রান্তগুলি কিছু অবিচ্ছিন্ন পথ তৈরি করে।
- এই পাথগুলির কোনটিতে একই রঙের দুটি শীর্ষবিন্দু থাকা উচিত নয়৷ ৷
আমাদের এই জাতীয় উপসেটের সংখ্যা গণনা করতে হবে। যদি উত্তরটি খুব বড় হয়, তাহলে ফলাফল মোড 10^9 + 7 ফেরত দিন।
সুতরাং, যদি ইনপুট রঙের মত হয় =[1,2,3,4], তাহলে আউটপুট হবে 11।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- গণনা :=একটি খালি মানচিত্র যেখানে সমস্ত মান একটি খালি তালিকা হবে৷ ৷
- n :=রঙের আকার
- আমি 0 থেকে রঙের আকার - 1 রেঞ্জের জন্য, কর
- গণনার শেষে i ঢোকান[colors[i]]
- উত্তর :=0
- 2 থেকে n রেঞ্জের i জন্য, করুন
- উত্তর :=উত্তর + nCr(n, i)
- গণনার সমস্ত কীগুলির তালিকায় প্রতিটি i-এর জন্য, করুন
- l0 :=গণনা[i]
- n0 :=l0 এর আকার
- যদি n0> 1 হয়, তাহলে
- আমি 0 থেকে n0-2 রেঞ্জের জন্য, কর
- i+1 থেকে n0 - 1 রেঞ্জে j-এর জন্য
- করুন
- d1 :=l0[j] -l0[i]
- d2 :=l0[i] -l0[j] + n
- যদি d1 <=n-3 বা d2<=n-3, তাহলে
- উত্তর :=উত্তর - ১
- করুন
- আমি 0 থেকে n0-2 রেঞ্জের জন্য, কর
- উত্তর ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from collections import defaultdict from math import factorial def nCr(n, i): if n==1: return 1 return factorial(n)//factorial(i)//factorial(n-i) def solve(colors): count = defaultdict(list) n = len(colors) for i in range(len(colors)): count[colors[i]].append(i) answer = 0 for i in range(2, n+1): answer += nCr(n, i) for i in count.keys(): l0 = count[i] n0 = len(l0) if n0 > 1: for i in range(n0-1): for j in range(i+1, n0): d1 = l0[j] -l0[i] d2 = l0[i] -l0[j] + n if d1 <= n-3 or d2<= n-3: answer -=1 return answer colors = [1,2,3,4] print(solve(colors))
ইনপুট
[1,2,3,4]
আউটপুট
11