تابع fa,b(x) برابر است با عددی که اگر تمامی ارقام a آن را به b و تمام ارقام b آن را به a تبدیل کنیم برابر با x شود.
به دو عدد 1≤xوy≤9 میگوییم k-equivalent اگر به ازای هر (i∈K) ، fx,y(i) عضو K باشد. میتوانید بررسی کنید که رابطه k-equivalent یک رابطهی هم ارزی است. به شما مجموعه K داده شده است، شما باید تمام ردههای k-equivalence اعداد 1 تا 9 را به دست آورید.
در هر سطر خروجی یک رده از اعداد k-equivalent را چاپ نمایید.
هر رده به صورت تعدادی عدد مرتب کنار هم است. سطر های خروجی باید به صورت lexicographically مرتب باشند.
ورودي نمونه | خروجي نمونه |
---|---|
1 1 566 | 1234 5 6 789 |
1 30 75 | 12 345 6 7 89 |
پاسخ
فرض کنید مجموعه K از بازه های مجزای [a2,b2] ، [a1,b1] تا [an,bn] تشکیل شده باشد و bi<ai+1.
فرض کنید تابع g(x,y,t) برابر باشد با کمترین p که p>t و fx,y(p)∈K.
میتوان نشان داد که شرط لازم و کافی برای این که x وy k-equivalent باشند این است که شرایط زیر بر قرار باشد.
پس اگر ما بتوانیم تابع g را پیاده سازی کنیم میتوانیم پاسخ سوال را بهدست آوریم.
برای این کار میتوانیم سمت چپترین رقمی از g(x,y,t) که با t تفاوت دارد را محاسبه کنیم و آن را تصحیح کنیم و به جای ارقام سمت راست آن 0 قرار دهیم عدد (q(t)). در صورتی که عدد بهدست آمده عضوی از K باشد، عدد بهدست آمده همان جواب است، در غیر این صورت مقدار g(x,y,q(t)) را به عنوان جواب بر میگردانیم. چون در هر مرحله یکی از ارقام عدد معلوم می شود، حد اکثر پس از 18 مرحله جواب مشخص می شود.
برای به دست آوردن q(t) باید به ازای تمامی ارقام t (شامل صفرهای بیارزش آن) مقادیر بیشتر را قرار دهیم و ارقام سمت راست را برابر با ? قرار دهیم. fx,y عدد بهدست آمده یک بازه را تشکیل میدهد، در صورتی که این بازه با K اشتراک داشت آن را به عنوان جواب برمیگردانیم، در غیر این صورت به سراغ ارقام بعدیمی رویم.
حال به ازای تمام a و b های بین 1 تا 9 شرایط را چک میکنیم و ردههای k-equivalent را بهدست میآوریم.
پيچيدگي
چون هر کدام از اعداد ورودی حداکثر 18 رقم دارند، تمام اعمال گفته شده از o(1) میباشد، به غیر از چک کردن این که یک بازه با K اشتراک دارد یا نه. اگر تمام ai ها و bi ها را به صورت مرتب داشته باشیم، با استفاده ازbinary search میتوانیم در زمان o(logn) چک کنیم که آیا یک بازه [a′,b′] باK اشتراک دارد یا نه.