งาน
สมมติว่าppepole ต้องแยกบิล แต่ละคนจะถูกระบุโดยสาม(Name, n, k)ประกอบด้วย:
Name: ชื่อ ;n: จำนวนเงินที่เธอ / เขามีการจ่าย ;k: จำนวนเงินที่เธอ / เขาจ่ายจริง
ความท้าทายที่นี่คือการหาว่าใครเป็นหนี้ใคร
สมมติฐาน
อินพุตและเอาต์พุตสามารถอยู่ในรูปแบบที่สะดวก
pnkpชื่อเป็นสตริงที่ไม่ซ้ำกันของความยาวโดยพลการประกอบด้วยตัวอักษรตัวพิมพ์เล็ก
วิธีการแก้
การแก้ปัญหาจะถูกแสดงด้วยชุดขั้นต่ำของการทำธุรกรรมในหมู่pประชาชน โดยเฉพาะอย่างยิ่งพวกเขาเป็นสามเท่า(from, to, amount)
from:nameของบุคคลที่ให้เงินto:nameของบุคคลที่รับเงินamount: จำนวนเงินของการทำธุรกรรม
หมายเหตุ : ผลรวมของหนี้ทั้งหมด ( n) อาจแตกต่างจากผลรวมของจำนวนเงินทั้งหมดที่ชำระไปแล้ว ( k) ในกรณีนี้คุณต้องเพิ่มในผลลัพธ์('owner', Name, amount)หรือ(Name, 'owner', amount)ในรูปแบบที่คุณเลือก ชื่อใด ๆ จะไม่เป็นownerสตริง 'เจ้าของ' ยืดหยุ่นได้
หากมีชุด mimimum หลายชุดให้เลือกชุดที่มีผลรวมขั้นต่ำของจำนวนธุรกรรมทั้งหมด (ค่าสัมบูรณ์); ในกรณีที่เสมอกันให้เลือกหนึ่งอัน
กรณีทดสอบ:
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)]
นี่คือรหัสกอล์ฟ: สั้นที่สุดชนะรหัส