K-Equivalence

تابع $f_{a,b}(x)$ برابر است با عددی که اگر تمامی ارقام $a$ آن را به $b$ و تمام ارقام $b$ آن را به $a$ تبدیل کنیم برابر با $x$ شود.

به دو عدد $1 \leq x و y \leq 9$ می‌گوییم k-equivalent اگر به ازای هر $(i \in K)$ ، $f_{x,y}(i)$ عضو $K$ باشد. می‌توانید بررسی کنید که رابطه k-equivalent یک رابطه‌ی هم ارزی است.

به شما مجموعه $K$ داده شده است، شما باید تمام رده‌های k-equivalence اعداد $1$ تا $9$ را به دست آورید.

ورودی

  • در سطر اول ورودی عدد $1 \leq n \leq 10^4$ آمده است. در $n$ سطر بعدی در هر سطر یک بازه آمده است.
  • مجموعه $K$ برابر با اجتماع بازه‌های داده شده است.
  • تمام اعداد ورودی در بازه $1$ و $10^{18}$ قرار می‌گیرند.

خروجی

در هر سطر خروجی یک رده از اعداد k-equivalent را چاپ نمایید.

هر رده به صورت تعدادی عدد مرتب کنار هم است. سطر‌های خروجی باید به صورت lexicographically مرتب باشند.

محدودیت‌ها

  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

ورودی و خروجی نمونه

ورودی نمونه خروجی نمونه
1
1 566
1234
5
6
789
1
30 75
12
345
6
7
89

پاسخ

فرض کنید مجموعه $K$ از بازه‌های مجزای $[a_2,b_2]$ ، $[a_1,b_1]$ تا $[a_n,b_n]$ تشکیل شده باشد و $b_i < a_{i+1}$.

فرض کنید تابع $g(x,y,t)$ برابر باشد با کم‌ترین $p$ که $p > t$ و $f_{x,y}(p) \in K$.

می‌توان نشان داد که شرط لازم و کافی برای این که $x$ و$y$ k-equivalent باشند این است که شرایط زیر بر قرار باشد.

  • $g(x,y,0) = a_1$
  • $g(x,y,b_i) = a_{i+1},i < n$
  • $g(x,y,b_n) = \infty$

پس اگر ما بتوانیم تابع $g$ را پیاده سازی کنیم می‌توانیم پاسخ سوال را به‌دست آوریم.

برای این کار می‌توانیم سمت چپ‌ترین رقمی از $g(x,y,t)$ که با $t$ تفاوت دارد را محاسبه کنیم و آن را تصحیح کنیم و به جای ارقام سمت راست آن 0 قرار دهیم عدد ($q(t)$). در صورتی که عدد به‌دست آمده عضوی از $K$ باشد، عدد به‌دست آمده همان جواب است، در غیر این صورت مقدار $g(x,y,q(t))$ را به عنوان جواب بر می‌گردانیم. چون در هر مرحله‌یکی از ارقام عدد معلوم می‌شود، حد اکثر پس از $18$ مرحله جواب مشخص می‌شود.

برای به دست آوردن $q(t)$ باید به ازای تمامی ارقام $t$ (شامل صفر‌های بی‌ارزش آن) مقادیر بیش‌تر را قرار دهیم و ارقام سمت راست را برابر با ? قرار دهیم. $f_{x,y}$ عدد به‌دست آمده‌یک بازه را تشکیل می‌دهد، در صورتی که این بازه با $K$ اشتراک داشت آن را به عنوان جواب برمی‌گردانیم، در غیر این صورت به سراغ ارقام بعدی‌می رویم.

حال به ازای تمام $a$ و $b$‌های بین $1$ تا $9$ شرایط را چک می‌کنیم و رده‌های k-equivalent را به‌دست می‌آوریم.

پیچیدگی

چون هر کدام از اعداد ورودی حداکثر $18$ رقم دارند، تمام اعمال گفته شده از $o(1)$ می‌باشد، به غیر از چک کردن این که‌ یک بازه با $K$ اشتراک دارد یا نه. اگر تمام $a_i$ ها و $b_i$ ها را به صورت مرتب داشته باشیم، با استفاده ازbinary search می‌توانیم در زمان $o(\log{n})$ چک کنیم که آیا یک بازه $[a',b']$ با$K$ اشتراک دارد یا نه.

▸ سوال قبل سوال بعد ◂