আমাদের একটি m x n ম্যাট্রিক্স আছে এবং অন্য একটি মান k। এখানে ম্যাট্রিক্সের কোঅর্ডিনেট (a, b)-এর মান হলো সব matrix[i, j]-এর XOR যেখানে i রেঞ্জে (0 থেকে a) এবং j রেঞ্জে (0 থেকে b)। আমাদের ম্যাট্রিক্সের সব কোঅর্ডিনেটের k-তম সর্বাধিক মান (১-ইন্ডেক্সড) বের করতে হবে।
উদাহরণস্বরূপ, ইনপুট ম্যাট্রিক্স:
| 5 | 2 |
| 1 | 6 |
এবং k = 1 হলে আউটপুট হবে 7 কারণ কোঅর্ডিনেট (0,1)-এর মান 5 XOR 2 = 7, এবং এটি সর্বাধিক।
সমাধানের ধাপসমূহ
m := রো সংখ্যা, n := কলাম সংখ্যাi= 0 থেকেm-1পর্যন্ত লুপ চালান:j= 0 থেকেn-1পর্যন্ত লুপ চালান:যদি
j != 0হয়, তবে:matrix[i][j] := matrix[i][j] XOR matrix[i][j-1]
seen := একটি নতুন ম্যাপcount := 0i= 0 থেকেn-1পর্যন্ত লুপ চালান:j= 0 থেকেm-1পর্যন্ত লুপ চালান:যদি
j != 0হয়, তবে:matrix[j][i] := matrix[j][i] XOR matrix[j-1][i]
seen[matrix[j][i]] = seen.get(matrix[j][i], 0) + 1count := count + 1যদি
count > kহয়, তবে:min_value := min(seen)seen[min_value] -= 1যদি
seen[min_value] == 0হয়, তবেmin_value-কেseen-এ থেকে মুছে দিন
min(seen)রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:
def solve(matrix, k):
m, n = len(matrix), len(matrix[0])
for i in range(m):
for j in range(n):
if j:
matrix[i][j] ^= matrix[i][j-1]
seen = {}
count = 0
for i in range(n):
for j in range(m):
if j:
matrix[j][i] ^= matrix[j-1][i]
seen[matrix[j][i]] = seen.get(matrix[j][i], 0) + 1
count += 1
if count > k:
min_value = min(seen)
seen[min_value] -= 1
if not seen[min_value]:
seen.pop(min_value)
return min(seen)
matrix = [[5,2],[1,6]]
k = 1
print(solve(matrix, k)) ইনপুট
[[5,2],[1,6]], 1
আউটপুট
7