ভূমিকা
সংখ্যার তালিকাকে বাছাই করার জন্য আপনারা বেশিরভাগই মার্জ সাজানোর অ্যালগরিদমের সাথে পরিচিত । অ্যালগরিদমের অংশ হিসাবে, একটি সাহায্যকারী ফাংশন লিখেছে merge
যা দুটি বাছাই করা তালিকাকে একটি সাজানো তালিকায় একত্র করে। পাইথনের মতো সিউডোকোডে, ফাংশনটি সাধারণত এইরকম কিছু দেখায়:
function merge(A, B):
C = []
while A is not empty or B is not empty:
if A is empty:
C.append(B.pop())
else if B is empty or A[0] ≤ B[0]:
C.append(A.pop())
else:
C.append(B.pop())
return C
ধারণা প্রথম উপাদানের ছোট পপিং রাখা A
এবং B
যতক্ষণ না উভয় তালিকা খালি রয়েছে, এবং মধ্যে ফলাফল সংগ্রহ C
। যদি A
এবং B
উভয়ই বাছাই করা হয়, তবে তাই C
।
বিপরীতভাবে, যদি C
একটি সাজানো তালিকা, এবং আমরা কোনো দুই subsequences সেটিকে বিভক্ত A
এবং B
তারপর, A
এবং B
এছাড়াও সাজানো হয় এবং merge(A, B) == C
। মজার বিষয় হল, C
বাছাই না করা হলে এটি অগত্যা ধরে রাখে না, যা আমাদের এই চ্যালেঞ্জের কাছে নিয়ে আসে।
ইনপুট
আপনার ইনপুটটি কয়েকটি হিসাবে প্রথম 2*n
ননজিটিভেটিভ পূর্ণসংখ্যার ক্রমবিন্যাস, তালিকা হিসাবে দেওয়া হয়েছে ।[0, 1, 2, ..., 2*n-1]
n > 0
C
আউটপুট
আপনার আউটপুট একটি truthy মান যদি দুটি তালিকা অস্তিত্ব থাকবে A
এবং B
দৈর্ঘ্য n
যেমন যে C == merge(A, B)
, এবং একটি falsy মান অন্যথায়। যেহেতু ইনপুটটিতে কোনও ডুপ্লিকেট নেই, আপনাকে কীভাবে merge
ফাংশনে বন্ধনগুলি ভাঙা হবে সে সম্পর্কে আপনাকে চিন্তা করতে হবে না ।
বিধি ও বোনাস
আপনি কোনও ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।
নোট করুন যে আপনাকে তালিকাটি A
এবং B
"হ্যাঁ" উদাহরণগুলিতে গণনা করার দরকার নেই । তবে, যদি আপনি তালিকাগুলি বাস্তবে আউটপুট করেন তবে আপনি -20% এর বোনাস পাবেন । এই বোনাসটি দাবি করতে, আপনাকে অবশ্যই কেবলমাত্র এক জোড়া তালিকা আউটপুট করতে হবে, সমস্ত সম্ভাবনা নয়। দৃ bon়ভাবে টাইপ করা ভাষায় এই বোনাসটিকে দাবি করা সহজ করার জন্য, "না" উদাহরণগুলিতে খালি তালিকার একজোড়া আউটপুট দেওয়ার অনুমতি রয়েছে।
ব্রুট জোর করা নিষিদ্ধ নয়, তবে সর্বশেষ চারটি পরীক্ষার কেসকে 1 সেকেন্ডের কমের মধ্যে গণনা করার জন্য -10% বোনাস রয়েছে ।
পরীক্ষার কেস
"হ্যাঁ" দৃষ্টান্তগুলিতে কেবলমাত্র একটি সম্ভাব্য আউটপুট দেওয়া হয়।
[1,0] -> False
[0,1] -> [0] [1]
[3,2,1,0] -> False
[0,3,2,1] -> False
[0,1,2,3] -> [0,1] [2,3]
[1,4,0,3,2,5] -> False
[4,2,0,5,1,3] -> [4,2,0] [5,1,3]
[3,4,1,2,5,0] -> [4,1,2] [3,5,0]
[6,2,9,3,0,7,5,1,8,4] -> False
[5,7,2,9,6,8,3,4,1,0] -> False
[5,6,0,7,8,1,3,9,2,4] -> [6,0,8,1,3] [5,7,9,2,4]
[5,3,7,0,2,9,1,6,4,8] -> [5,3,7,0,2] [9,1,6,4,8]
[0,6,4,8,7,5,2,3,9,1] -> [8,7,5,2,3] [0,6,4,9,1]
[9,6,10,15,12,13,1,3,8,19,0,16,5,7,17,2,4,11,18,14] -> False
[14,8,12,0,5,4,16,9,17,7,11,1,2,10,18,19,13,15,6,3] -> False
[4,11,5,6,9,14,17,1,3,15,10,12,7,8,0,18,19,2,13,16] -> [4,17,1,3,15,10,12,7,8,0] [11,5,6,9,14,18,19,2,13,16]
[9,4,2,14,7,13,1,16,12,11,3,8,6,15,17,19,0,10,18,5] -> [9,4,2,16,12,11,3,8,6,15] [14,7,13,1,17,19,0,10,18,5]
(K[0], Q-K[0])
করতে চেয়ে মুদ্রণের চেয়ে এটি পেতে পারেন(K[0], K[-1])
। যদিও এটি কোনও সঞ্চয় দেয় কিনা তা আমি জানি না।