فرض کنید عملگر ⊙ بر روی اعداد {0,1,…,9}×{0,1,…,9}⟶{0,1,…,9} تعریف شده باشد. در این صورت عملگر ⊗ بر روی دو عدد x و y به صورت کنار هم گذاشتن حاصل عملگر ⊙ارقام متناظر دو عدد تعریف میشود. (در صورتی که تعداد ارقام دو عدد برابر نباشند تعدادی 0 قبل از عدد کوچکتر قرار میدهیم تا تعداد ارقام دو عدد برابر شوند).
برای مثال اگر x⊙y برابر باشد با x×y به پیمانه 10 ، مقدار 5566⊗239 به صورت زیر محاسبه میشود.
ترتیب اجرای عملگر ⊗ از چپ به راست است.
به شما دو عدد a و b داده شده است، شما باید حاصل a⊗(a+1)⊗(a+2)…(b−1)⊗b را محاسبه کنید.
در 10 سطر اول ورودی 10 عدد بین 0 تا 9 آمده است که عدد درون سطر i ام و ستون j ام برابر است با (i−1)⊙(j−1). در سطر بعدی ورودی دو عدد 0≤a≤b≤1018 آمده است.
در تنها سطر خروجی پاسخ سوال را چاپ نمایید.
ورودي نمونه | خروجي نمونه |
---|---|
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⊕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×10k است که یعنی ابتدا 10k بار عمل مذکور را با 0، بعد 10k بار با 1 و ⋯ . تا 10k بار با 9 عمل مذکور را انجام دهیم. به ازای هر رأس میتوان مانند بالا به دست آورد که اگر از آن شروع کنیم و این بسته را انجام دهیم به چه عددی میرسیم (به ازای هر رأس با 10×20 حرکت حداکثر). مانند بالا میتوان فهمید اگر Q بار این بسته را روی یک عدد انجام دهیم به چه عددی میرسیم زیرا میتوان گراف جدیدی ساخت که از v به u یال باشد اگر و فقط اگر با اعمال این بسته روی v به u برسیم.
حال اعداد a تا b را زیر هم به صورتی که در سؤال گفته مینویسیم. (صفر بیارزش اضافه کنیم) بدیهی است که کافیست ارقام را جدا در نظر بگیریم یعنی ابتدا یکانها را با هم در نظر گرفته و یکان جواب نهایی را بهدست آورده، دهگان را با هم در نظر گرفته و دهگان جواب نهایی را بهدست آورده و ⋯ پس کافیست به ازای هر رقم بتوانیم جدا حساب کنیم که نتیجه چه خواهد بود. حال میخواهیم رقم k ام (با ارزش 10k )را حساب کنیم.
حال میخواهیم برای رقم k ام حل کنیم. اگر رقم k ام عدد a را x بنامیم:
فاز1 : ابتدا باید مقداری عمل مذکور را با x بعد x+1 و ⋯ تا 9 انجام داد.
فاز 2: بعد روی رقم حاصل باید با 10k تا ⋯ تا 10kتا 9 عمل مذکور را انجام داد. فاز 2 را باید Q بار انجام بدهیم.
فاز :3 اگر رقم k ام عدد b را y بنامیم، بعد روی رقم حاصل باید 10k با 0 ⋯ تا 10k با y−1 و مقداری (که کمتر از 10k است) با y عمل مذکور را انجام داد تا به عدد b برسیم و رقم حاصل از این مرحله جواب مسئله برای رقم k ام است.
برای حل فاز 1 و 3 همانطور که در لم 1 بیان شد عمل میکنیم و در حد اکثر در 2010 حرکت میتوان جواب آن فاز را بهدست آورد. برای فاز 2 نیز از لم 2 استفاده کرده و در 2010 حرکت میتوان آن گراف را ساخت و به ازای Q باری که باید بسته را اعمال کنیم در 20 حرکت میتوان جواب را بهدست آورد. پس به ازای هر رقم در حداکثر 500 حرکت میتوان جواب را پیدا کرد و حداکثر 18 رقم داریم پس در کل با در نظر گرفتن ساختن گرافهای اولیه هم میتوان جواب را در زمان مناسب بهدست آورد.