ধরুন, আমাদেরকে 'TestArray' নামে একটি ক্লাস দেওয়া হয়েছে যেটিতে একটি ব্যক্তিগত অ্যারে রয়েছে যা শুধুমাত্র 0 বা 1 মান ধারণ করতে পারে; এবং দুটি পাবলিক সদস্য ফাংশন length() এবং query()। ফাংশন length() অ্যারের দৈর্ঘ্য প্রদান করে এবং ফাংশন query() অ্যারের বিভিন্ন মানের তুলনা করে তিনটি ভিন্ন মান প্রদান করে। ফাংশনটি ইনপুট হিসাবে চারটি মান p, q, r, s নেয় এবং এইভাবে কাজ করে −
-
যদি অ্যারের প্রদত্ত সূচীতে চারটি মান 0 বা 1 হয় তবে এটি 4 প্রদান করে।
-
অন্যথায় যদি অ্যারের প্রদত্ত সূচীতে তিনটি মান একই হয় এবং চতুর্থ মানটি ভিন্ন হয়, তাহলে এটি 2 প্রদান করে।
-
অন্যথায় যদি অ্যারের প্রদত্ত সূচীতে অ্যারের দুটি মান 0 এবং দুটি মান 1 থাকে, তবে এটি 0 প্রদান করে।
আমাদের অ্যারের মধ্যে সবচেয়ে ঘন ঘন যে উপাদানটির সূচী খুঁজে বের করতে হবে অ্যারে নিজেই অ্যাক্সেস না করে এবং ক্লাসের শুধুমাত্র সদস্য ফাংশন ব্যবহার না করে। যদি অ্যারেতে একই সংখ্যা 0 এবং 1 থাকে তবে এটি মান -1 প্রদান করে।
সুতরাং, যদি ইনপুটটি অ্যারের মত হয় =[0, 1, 1, 0, 1, 1, 1, 0], তাহলে আউটপুট হবে 2 অ্যারের সূচক 2-এ, মান হল 1 যা সবচেয়ে ঘন ঘন হয় অ্যারের মধ্যে মান। একইভাবে, 1, 4, 5, 6 উত্তরগুলিও সত্য কারণ সূচীতেও 1 মান রয়েছে৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n:=দৈর্ঘ্য()
-
groupA :=1
-
গ্রুপ বি :=0
-
aIdx :=শূন্য
-
bIdx :=শূন্য
-
প্রথম:=:=প্রশ্ন(0, 1, 2, 3)
-
দ্বিতীয় :=প্রশ্ন(0, 1, 2, 4)
-
4 থেকে n রেঞ্জের জন্য, করুন
-
যদি ক্যোয়ারী(0, 1, 2, i) প্রথমের মতই হয়, তাহলে
-
groupA:=groupA+1
-
aIdx :=i
-
-
অন্যথায়,
-
groupB:=groupB+1
-
bIdx :=i
-
-
-
আমি 0 থেকে 2 রেঞ্জের জন্য, কর
-
nxt :=নতুন তালিকা
-
1 থেকে 4 পরিসরে v এর জন্য, করুন
-
যদি v i এর মত না হয়, তাহলে
-
nxt এর শেষে v যোগ করুন
-
-
-
যদি ক্যোয়ারী(nxt-এর মান) সেকেন্ডের সমান হয়, তাহলে
-
groupA:=groupA + 1
-
aIdx :=i
-
-
অন্যথায়,
-
groupB:=groupB+1
-
bIdx :=i
-
-
-
যদি groupA>groupB, তাহলে
-
ফেরত aIdx
-
-
অন্যথায়, যদি groupB>groupA, তাহলে
-
ফেরত aIdx
-
-
অন্যথায়,
-
রিটার্ন -1
-
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
class TestArray: def __init__(self, array) -> None: self.__arr = array def length(self): return len(self.__arr) def query(self, p, q, r, s): val = self.__arr[p] + self.__arr[q] + self.__arr[r] + self.__arr[s] if val == 4 or val == 0: return 4 elif val == 1 or val == 3: return 2 elif val == 2: return 0 def solve(reader): n,groupA,groupB,aIdx,bIdx=reader.length(),1,0,None,None first,second=reader.query(0,1,2,3),reader.query(0,1,2,4) for i in range(4,n): if reader.query(0,1,2,i)==first: groupA,aIdx=groupA+1,i else: groupB,bIdx=groupB+1,i for i in range(3): nxt=[v for v in [0,1,2,3,4] if v!=i] if reader.query(*nxt)==second: groupA,aIdx=groupA+1,i else: groupB,bIdx=groupB+1,i return aIdx if groupA>groupB else bIdx if groupB>groupA else -1 arr_ob = TestArray([0, 1, 1, 0, 1, 1, 1, 0]) print(solve(arr_ob))
ইনপুট
[0, 1, 1, 0, 1, 1, 1, 0]
আউটপুট
2