কার্য
মনে করুন যে pপিলকে একটি বিল বিভক্ত করতে হবে; তাদের প্রত্যেকটি গঠিত একটি ট্রিপল দ্বারা চিহ্নিত (Name, n, k):
Name: নাম ;n: তাকে যে পরিমাণ অর্থ প্রদান করতে হবে ;k: তিনি / তিনি আসলে প্রদানের পরিমাণ ।
এখানে চ্যালেঞ্জটি হ'ল কে কার ণী তা সন্ধান করা।
অনুমিতি
ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে হতে পারে।
pnkpনামগুলি স্বেচ্ছাসেবী দৈর্ঘ্যের স্বতন্ত্র স্ট্রিং, লোয়ার কেস বর্ণমালার অক্ষর দ্বারা গঠিত।
সমাধান
সমাধান pমানুষের মধ্যে লেনদেনের সর্বনিম্ন সেট দ্বারা প্রতিনিধিত্ব করা হয় ; বিশেষত তারা ত্রিগুণ হয়(from, to, amount)
from:nameযে ব্যক্তি অর্থ দেয়;to:nameযে ব্যক্তি অর্থ গ্রহণ করে;amount: লেনদেনের পরিমাণ
দ্রষ্টব্য : nসমস্ত debtsণের যোগফল ( k) ইতিমধ্যে প্রদত্ত সমস্ত পরিমাণের ( ) এর যোগফল থেকে পৃথক হতে পারে । এই ক্ষেত্রে, আপনার অবশ্যই আউটপুট ('owner', Name, amount)বা (Name, 'owner', amount)আপনার চয়ন করা বিন্যাসে যুক্ত করতে হবে। কোনও নাম কখনই থাকবে না ownerstring স্ট্রিংয়ের 'মালিক' নমনীয়।
বেশ কয়েকটি ন্যূনতম সেট উপস্থিত থাকলে, সমস্ত লেনদেনের পরিমাণের (সর্বমোট মান) সর্বনিম্ন যোগফলের সাথে একটি নির্বাচন করুন; টাই করার ক্ষেত্রে, তাদের মধ্যে একটি চয়ন করুন।
পরীক্ষার কেস:
inputs(Name,n,k):
[('a',30,40),('b',40,50),('c',30,15)]
[('a',30,30),('b',20,20)]
[('a',30,100),('b',30,2),('c',40,0)]
[('a',344,333),('b',344,200),('c',2,2)]
[('a',450,400),('b',300,300),('c',35,55)]
outputs(from, to, amount):
[('c','a',10),('c','b',5),('owner','b',5)] or [('c','b',10),('c','a',5),('owner','a',5)]
[]
[('owner','a',2),('b','a',28),('c','a',40)] PS: [('owner','a',2),('b','a',68),('c','b',40)] has the same number of transactions, but it is not a valid answer, because the total amount of its transaction is greater than that of the proposed solution.
[('a','owner',11),('b','owner',144)]
[('a','owner',30),('a','c',20)]
এটি কোড-গল্ফ: সংক্ষিপ্ততম কোড জয় ।