ধরা যাক দুটি ইন্টিজার N এবং K দেওয়া আছে। আমাদের Nটি ইউনিক মান বের করতে হবে যাদের বিটওয়াইজ OR হলো K। যদি সম্ভব না হয় তবে -1 রিটার্ন করুন।
যেমন, N = 4 এবং K = 6 হলে আউটপুট হবে [6, 0, 1, 2]।
সমাধানের ধাপসমূহ
- MAX := 32, visited := 32 আকারের বুলিয়ান অ্যারে (False দিয়ে ভরা)
- res := খালি লিস্ট
- add() ফাংশন ডিফাইন করুন যা num নেয় এবং বিট ম্যানিপুলেশন করে res-এ মান যোগ করে
- মেইন ফাংশনে:
- pow2 := 2^0 থেকে 2^31 পর্যন্ত অ্যারে
- res-এ k যোগ করুন
- cnt_k := k-তে সেট বিটের সংখ্যা
- যদি pow2[cnt_k] < n হয়: return -1
- count := 0
- for i in range(pow2[cnt_k] - 1):
- add(i)
- count বাড়ান
- যদি count == n হয়: ব্রেক
- res রিটার্ন করুন
উদাহরণ
MAX = 32
visited = [False for i in range(MAX)]
res = []
def set_bit_count(n):
if n == 0: return 0
else: return (n & 1) + set_bit_count(n >> 1)
def add(num):
point = 0
value = 0
for i in range(MAX):
if visited[i]: continue
else:
if num & 1: value += (1 << i)
num //= 2
res.append(value)
def solve(n, k):
pow2 = [2**i for i in range(MAX)]
res.append(k)
cnt_k = set_bit_count(k)
if pow2[cnt_k] < n: return -1
count = 0
for i in range(pow2[cnt_k] - 1):
add(i)
count += 1
if count == n: break
return res
n = 4
k = 6
print(solve(n, k))
ইনপুট
4, 6
আউটপুট
[6, 0, 1, 2]