- محدودیت زمان: ۱۰ ثانیه (برای تمامی زبانهای برنامهنویسی)
- محدودیت حافظه: ۵۱۲ مگابایت (برای تمامی زبانهای برنامهنویسی)
افرادی را میشناسیم که میدانیم به مرور زمان به یکدیگر پول قرض میدهند. در ابتدا هیچکس به دیگری بدهکار یا طلبکار نیست اما در طی این قرض دادنها افراد نسبت به یکدیگر بدهکار یا طلبکار میشوند. در این مسئله باید با بررسی گزارش مالی این افراد، مقداری که نسبت به هم بدهکار یا طلبکار میشوند را محاسبه کنید.
بدهکار و طلبکار بودن یا نبودن افراد را طبق همان تعاریف بدیهیای که در واقعیت داریم چنین تعریف میکنیم:
- فرد $x$ به فرد $y$ بدهکار است، اگر و تنها اگر مقداری اکیداً بزرگتر از $0.00$ دلار وجود داشتهباشد که زمانی قبلتر $y$ به $x$ قرض دادهباشد اما هنوز آن را کامل پس نگرفتهباشد.
- فرد $x$ از فرد $y$ طلبکار است، اگر و تنها اگر مقداری اکیداً بزرگتر از $0.00$ دلار وجود داشتهباشد که زمانی قبلتر $x$ به $y$ قرض دادهباشد اما هنوز آن را کامل پس نگرفتهباشد.
گزارش مالی در طی زمان به صورت تعدادی دستور برای شما ارسال میشود و شما هر بار باید این دستورها را روی ساختمان دادهی خود اعمال کنید و اگر نیاز بود اطلاعاتی را هم چاپ کنید.
دستورهایی که به شما داده میشود، در قالب یکی از چند حالت زیر است:
1 s_1 s_2 x
: این دستور، یعنی فردی با نام $s_1$ مقدار $x$ دلار به فردی با نام $s_2$ قرض داد.2
: با این دستور، از شما درخواست میشود که نام کسی را چاپ کنید که مجموع میزان سرمایهی بهدست آوردهاش منهای مجموع میزان سرمایهی از دست دادهاش بیشینه (و مثبت) باشد. اگر چندین فرد این ویژگی را داشتند، نام فردی را بنویسید که از نظر ترتیب لغتنامهای کوچکتر است. اگر هیچ فردی که مجموع میزان سرمایهی بهدست آوردهاش از مجموع میزان سرمایهی از دست دادهاش اکیداً بیشتر باشد وجود نداشت، فقط $-1$ چاپ کنید.3
: با این دستور، از شما درخواست میشود که نام کسی را چاپ کنید که مجموع میزان سرمایهی بهدست آوردهاش منهای مجموع میزان سرمایهی از دست دادهاش کمینه (و منفی) باشد. اگر چندین فرد این ویژگی را داشتند، نام فردی را بنویسید که از نظر ترتیب لغتنامهای کوچکتر است. اگر هیچ فردی که مجموع میزان سرمایهی بهدست آوردهاش از مجموع میزان سرمایهی از دست دادهاش اکیداً کمتر باشد وجود نداشت، فقط $-1$ چاپ کنید.4 s
: با این دستور، از شما درخواست میشود که تعداد افرادی را چاپ کنید که فردی با نام $s$ به آنها بدهکار است.5 s
: با این دستور، از شما درخواست میشود که تعداد افرادی را چاپ کنید که فردی با نام $s$ از آنها طلبکار است.6 s_1 s_2
: با این دستور، از شما درخواست میشود که چاپ کنید فردی با نام $s_1$ دقیقاً چند دلار باید به فردی با نام $s_2$ بدهد تا حسابشان صاف شود. این مقدار میتواند مثبت یا صفر یا منفی باشد و باید دقیقاً با دو رقم اعشار چاپ شود (مقدار منفی بهجای دادن پول، گرفتن پول را نشان میدهد).
ورودی
در اولین خط ورودی عدد صحیح $q$ آمدهاست که تعداد دستورها را نشان میدهد. $$1 \leq q \leq 1.5 \times 10^5$$ در $q$ خط بعدی، هر خط از ورودی یکی از شش حالتی که در بالا بیان شد را دارد. تمام اسامی افراد فقط شامل حروف کوچک الفبای انگلیسی میشوند و تعداد حروف هیچیک از ۸ بیشتر نیست. در همهی انواع دستورها بهجز دستورهای نوع ۱، تضمین میشود که نام فردی که در ورودی میآید جدید نیست (یعنی نامش پیش از آن حداقل یک بار دیگر هم در ورودی آمدهاست). تمام مقادیر عددی مالی (که به واحد دلار نوشته شدهاند)، دقیقاً دارای ۲ رقم اعشار میباشند. این اعداد مثبت هستند و کمتر از $0.01$ نیستند و بیشتر از $10000000.99$ هم نیستند.
خروجی
به ازای دستورهای نوع ۲، ۳، ۴، ۵ و ۶ پاسخ درخواست را چاپ کنید (و به ازای دستورهای نوع ۱، در هیچ حالتی چیزی چاپ نکنید).
مثال
ورودی نمونه ۱
21
1 mohsen hamid 5.50
1 hamid mohsen 5.50
1 ali mohsen 15.50
1 mohsen ali 15.50
1 ali reza 10.00
6 reza ali
1 reza ali 30.00
1 ali reza 40.00
6 reza ali
2
3
4 ali
5 ali
6 ali reza
1 reza ali 21.00
2
3
1 ali reza 1.00
2
3
6 ali reza
خروجی نمونه ۱
10.00
20.00
reza
ali
0
1
-20.00
ali
reza
-1
-1
0.00
ورودی نمونه ۲
27
1 a b 100.00
2
3
1 b c 100.00
2
3
6 a b
6 b c
6 c a
6 b a
6 c b
6 a c
1 c a 100.00
2
3
6 a b
6 b c
6 c a
6 b a
6 c b
6 a c
4 a
4 b
4 c
5 a
5 b
5 c
خروجی نمونه ۲
b
a
c
a
-100.00
-100.00
0.00
100.00
100.00
0.00
-1
-1
-100.00
-100.00
-100.00
100.00
100.00
100.00
1
1
1
1
1
1
نکات
- به ازای هر ورودی معتبر مسئله، دقیقاً یک خروجی مشخص درست وجود دارد.
- علامت منفی را فقط پشت اعداد منفی بگذارید. برای مثال چاپ کردن
-0.00
اشتباه است.
ارسال پاسخ برای این سؤال