فرض کنید عملگر $\odot$ بر روی اعداد $\{0,1,\ldots,9\} \times \{0,1,\ldots,9\} \longrightarrow \{0,1,\ldots,9\}$ تعریف شده باشد. در این صورت عملگر $\otimes$ بر روی دو عدد $x$ و $y$ به صورت کنار هم گذاشتن حاصل عملگر $\odot$ارقام متناظر دو عدد تعریف میشود. (در صورتی که تعداد ارقام دو عدد برابر نباشند تعدادی 0 قبل از عدد کوچکتر قرار میدهیم تا تعداد ارقام دو عدد برابر شوند).
برای مثال اگر $x \odot y$ برابر باشد با $x \times y$ به پیمانه $10$ ، مقدار $5566 \otimes 239$ به صورت زیر محاسبه میشود.
ترتیب اجرای عملگر $\otimes$ از چپ به راست است.
به شما دو عدد $a$ و $b$ داده شده است، شما باید حاصل $a \otimes (a+1) \otimes (a+2) \ldots (b-1) \otimes b$ را محاسبه کنید.
در $10$ سطر اول ورودی $10$ عدد بین 0 تا 9 آمده است که عدد درون سطر $i$ ام و ستون $j$ ام برابر است با $(i-1) \odot (j-1)$. در سطر بعدی ورودی دو عدد $0 \leq a \leq b \leq 10^{18}$ آمده است.
در تنها سطر خروجی پاسخ سوال را چاپ نمایید.
ورودي نمونه | خروجي نمونه |
---|---|
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 0 2 3 4 5 6 7 8 9 0 1 3 4 5 6 7 8 9 0 1 2 4 5 6 7 8 9 0 1 2 3 5 6 7 8 9 0 1 2 3 4 6 7 8 9 0 1 2 3 4 5 7 8 9 0 1 2 3 4 5 6 8 9 0 1 2 3 4 5 6 7 9 0 1 2 3 4 5 6 7 8 0 10 | 15 |
پاسخ
گراف جهتدار $G$ را بدین صورت میسازیم که $10$ رأس با شماره های $1$ تا $10$ دارد، و هر رأس آن $10$ یال خروجی دارد که روی آنها به ترتیب اعداد $1$ تا $10$ نوشته شده است. این گراف را بدین صورت میسازیم که یال $i$ ام (عدد $i$ روی آن نوشته شده است) رأس $v$ به رأس $u$ میرود اگر و فقط اگر $v \oplus i$ برابر با $u$ باشد. یعنی از عدد $v$ شروع کرده و با $i$ عمل مذکور را انجام داده به $u$ میرسیم. $adj[v][i] = u$
لم 1: حال میخواهیم ببینیم اگر از عدد $v$ شروع کنیم و $k$ بار عمل مذکور با عدد $i$ انجام دهیم به چه عددی میرسیم. فقط یالهای با شماره $i$ را در نظر گرفته. چون حداکثر $10$ رأس داریم و هر رأس یک یال خروجی دارد اگر از $v$ شروع میکنیم بعد از حداکثر $10$ حرکت به یک رأس تکراری (دور) میرسیم. فرض کنید $x$ مرحله حرکت کرده باشیم تا به ابتدای این دور برسیم یا $k$ از $x$ کمتر است که رأس نهایی را پیدا کردیم، وگرنه باید $k-x$ گام روی این حلقه حرکت کنیم و به رأس نهایی برسیم. که کافیست باقیمانده $k-x$ بر طول دور را حساب کرده و فقط به آن اندازه (حداکثر $10$ گام) حرکت کرده.
لم :2یک بسته $k$ تایی را بدین صورت تعریف میکنیم که طول آن $10 \times 10^k$ است که یعنی ابتدا $10^k$ بار عمل مذکور را با $0$، بعد $10^k$ بار با $1$ و $\cdots$ . تا $10 ^k$ بار با $9$ عمل مذکور را انجام دهیم. به ازای هر رأس میتوان مانند بالا به دست آورد که اگر از آن شروع کنیم و این بسته را انجام دهیم به چه عددی میرسیم (به ازای هر رأس با $10 \times 20$ حرکت حداکثر). مانند بالا میتوان فهمید اگر $Q$ بار این بسته را روی یک عدد انجام دهیم به چه عددی میرسیم زیرا میتوان گراف جدیدی ساخت که از $v$ به $u$ یال باشد اگر و فقط اگر با اعمال این بسته روی $v$ به $u$ برسیم.
حال اعداد $a$ تا $b$ را زیر هم به صورتی که در سؤال گفته مینویسیم. (صفر بیارزش اضافه کنیم) بدیهی است که کافیست ارقام را جدا در نظر بگیریم یعنی ابتدا یکانها را با هم در نظر گرفته و یکان جواب نهایی را بهدست آورده، دهگان را با هم در نظر گرفته و دهگان جواب نهایی را بهدست آورده و $\cdots$ پس کافیست به ازای هر رقم بتوانیم جدا حساب کنیم که نتیجه چه خواهد بود. حال میخواهیم رقم $k$ ام (با ارزش $10 ^k$ )را حساب کنیم.
حال میخواهیم برای رقم $k$ ام حل کنیم. اگر رقم $k$ ام عدد $a$ را $x$ بنامیم:
فاز1 : ابتدا باید مقداری عمل مذکور را با $x$ بعد $x+1$ و $\cdots$ تا $9$ انجام داد.
فاز 2: بعد روی رقم حاصل باید با $10 ^k$ تا $\cdots$ تا $10 ^k$تا $9$ عمل مذکور را انجام داد. فاز $2$ را باید $Q$ بار انجام بدهیم.
فاز :3 اگر رقم $k$ ام عدد $b$ را $y$ بنامیم، بعد روی رقم حاصل باید $10^k$ با $0$ $\cdots$ تا $10^k$ با $y-1$ و مقداری (که کمتر از $10^k$ است) با $y$ عمل مذکور را انجام داد تا به عدد $b$ برسیم و رقم حاصل از این مرحله جواب مسئله برای رقم $k$ ام است.
برای حل فاز $1$ و $3$ همانطور که در لم $1$ بیان شد عمل میکنیم و در حد اکثر در $20 10$ حرکت میتوان جواب آن فاز را بهدست آورد. برای فاز $2$ نیز از لم $2$ استفاده کرده و در $20 10$ حرکت میتوان آن گراف را ساخت و به ازای $Q$ باری که باید بسته را اعمال کنیم در $20$ حرکت میتوان جواب را بهدست آورد. پس به ازای هر رقم در حداکثر $500$ حرکت میتوان جواب را پیدا کرد و حداکثر $18$ رقم داریم پس در کل با در نظر گرفتن ساختن گرافهای اولیه هم میتوان جواب را در زمان مناسب بهدست آورد.