لینکهای مفید برای شرکت در مسابقه:
راهنماییها بزودی با زمانبندی زیر به پایین صورت سوالها اضافه میشود.
میتوانید سوالات خود را از قسمت سوال بپرسید مطرح کنید.
فردا تولد حیدریه!
به همین دلیل دوست حیدری حال ندارد برای این سوال داستان بنویسد.
یک عدد را حیدری-تپهای مینامیم اگر ارقام آن از چپ به راست تا یک جایی کوچک نشوند (میتوانند بزرگ شوند و یا ثابت بمانند) سپس از آنجا به بعد بزرگ نشوند (میتوانند کوچک شوند و یا ثابت بمانند).
برای مثال اعداد ۱۲۲۳۴۴۲۱، ۱۲، ۳۵۷، ۵۴۱ و ۱۲۳۲۱ حیدری-تپهای هستند ولی اعداد ۱۲۳۲۱۳، ۱۰۱ و ۳۷۳۵ حیدری-تپهای نیستند.
به شما عدد داده میشود، به ازای هر عدد اگر آن عدد حیدری-تپهای بود تعداد اعداد طبیعی حیدری-تپهای کمتر یا مساوی آن را چاپ کنید و اگر حیدری-تپهای نبود -1
را در خروجی چاپ کنید.
در خط اول ورودی تعداد اعداد داده میشود.
سپس در خط بعدی در هر خط یک عدد حداکثر ۷۰ رقمی به شما داده میشود.
در خط جواب سوال را چاپ کنید.
تضمین میشود همیشه جواب در متغیر ۶۴-بیتی جا میشود.
به کمک برنامه نویسی پویا جواب سوال را پیدا میکنیم. dp[i][j][2]
را تعریف میکنیم: چند عدد رقمی داریم که رقم آخر آنها برابر است. بعد سوم dp
نشاندهنده آن است که آیا تا به الان کوچک شدن رقمهای عدد ما آغاز شده است یا خیر.
در راهنمایی بعدی، بروز شدن dp
دقیقتر توضیح داده میشود.
برای بهروز کردن دیپی رقم آخر عددمان را فیکس میکنیم.
حال اگر در استیتی باشیم که رقم داشته باشیم و رقم آخر عددمان تعیین شده باشد با ۲ حالت زیر روبهرو هستیم:
حالت اول:
کوچک شدن ارقام عددمان شروع شده است (بعد سوم دیپی ۱ باشد) در این صورت دیپی ما برابر جمع دیپی اعداد رقمی است که رقم آخرشان بزرگتر یا مساوی باشد.
حالت دوم:
کوچک شدن ارقام اعدادمان شروع نشده است (بعد سوم دیپی ۰ باشد) در این صورت دیپی ما برابر جمع دیپی اعداد رقمی است که رقم آخرشان کوچکتر یا مساوی باشد.
در زمان دادن خروجی باید حواسمان باشد تعداد اعدادی که کوچکتر از عدد داده شده هستند را چاپ کنیم!