ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যাকে বলা হয় সংখ্যা। এখন f(i) বলে একটি ফাংশন বিবেচনা করুন যা সূচক i এ উপাদানটিকে মুছে দেয় এবং তারপর সত্য বা মিথ্যা প্রদান করে, ফলাফল তালিকার জোড় সূচকের মানের সমষ্টির উপর নির্ভর করে বিজোড় সূচক মানের সমষ্টির সমান বা না। তাই আমাদের সূচির সংখ্যা প্রয়োজন যার জন্য f সত্য হবে।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[6, 8, 5, 2, 3], তাহলে আউটপুট হবে 2 কারণ, যদি আমরা 8টি সরিয়ে দেই, তাহলে অ্যারেটি হবে [6, 5, 2, 3], বিজোড় এবং এমনকি সূচক উপাদানের যোগফল 8, তাই তারা একই। আরেকটি সম্ভাব্য সমাধান হল, যদি আমরা 2 মুছে ফেলি, তাহলে অ্যারে হবে [6, 8, 5, 3], এখানে বিজোড় এবং জোড় সূচীকৃত উপাদানের যোগফল 11, তাই তারা একই।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=সংখ্যার আকার
- a :=অর্ডারের একটি 2d তালিকা 2 x (n+1) এবং প্রতিটি 0s দিয়ে পূরণ করুন
- প্রতিটি সূচক i এবং মান x সংখ্যার জন্য, করুন
- a[0, i + 1] :=a[0, i]
- a[1, i + 1] :=a[1, i]
- a[i mod 2, i + 1] :=a[i mod 2, i + 1] + x
- c :=0
- s :=সংখ্যায় উপস্থিত সমস্ত উপাদানের যোগফল
- আমি 0 থেকে n - 1 রেঞ্জের জন্য, কর
- e :=a[0, i] - a[0, 0] + a[1, n] - a[1, i + 1]
- যদি e * 2 s - nums[i] এর মত হয়, তাহলে
- c :=c + 1
- রিটার্ন c
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(nums): n = len(nums) a = [[0] * (n + 1), [0] * (n + 1)] for i, x in enumerate(nums): a[0][i + 1] = a[0][i] a[1][i + 1] = a[1][i] a[i % 2][i + 1] += x c = 0 s = sum(nums) for i in range(n): e = a[0][i] - a[0][0] + a[1][n] - a[1][i + 1] if e * 2 == s - nums[i]: c += 1 return c nums = [6, 8, 5, 2, 3] print(solve(nums))
ইনপুট
[6, 8, 5, 2, 3]
আউটপুট
2