سلام!
امیدواریم که از سؤالات آزمون ورودی سامرکمپ ستون لذت برده باشید. در ادامه راهحلهای سؤالات مسابقه توضیح داده شدند.
در صورتی که متوجه راهحلی نشدید، میتونید در بخش نظرات، سؤالات و ابهامهای خودتون رو مطرح کنید. همچنین اگه راهحل دیگهای برای سؤالات دارید، خوشحال میشیم که راهحلتون رو در بخش نظرات با ما و دوستانتون به اشتراک بذارید.
اگر بشقابها را از 1 تا n بهترتیب شمارهگذاری کنیم، برای هر i از 1 تا n، کنار بشقاب iام چنگال یا قاشق ti و ti+n قرار میگیرد. پس زمانی کنار بشقاب i هم قاشق و هم چنگال قرار دارد که ti=ti+n باشد. کافی است این مورد را با ایجاد یک حلقه بررسی کنید.
پیچیدگی زمانی: O(n)
فرض کنید dpi کمترین تعداد عملیاتی باشد که برای نوشتن i رقمِ اولِ عدد n نیاز داریم.
بهعنوان حالت پایه میدانیم dp0=0 است. اگر رقمِ iام عددِ n را با ni نشان دهیم؛ برای هر i از 0 تا n−1 و هر k از 1 تا بزرگترین پیشوند مشترک sni+1 و ni+1,ni+2… رابطهی بازگشتی زیر را داریم:
dpi+k=min{dpi+k,dpi+∣sni+1∣−k+1}
حال به کمک رابطهی بازگشتی بالا میتوانید مقدار dp∣n∣ را حساب کنید که پاسخ مسئله است.
هر بازه در هر ردیف از صندلیهای سینما که حداقل یک جای خالی دارد را بهصورت یک سهتایی (i,jl,jr) در نظر بگیرید. (یعنی در سطر iام همه صندلیهای ستون jlام و jrام خالی است و این بازه نیز قابل گسترش نیست.)
حال به کمک این سهتاییِ مرتب میتوان دو بازه را مقایسه کرد و تشخیص داد که صندلی مناسبتر در کدام بازه قرار دارد.
بنابراین کافی است یک ساختمان داده مثل set
در نظر گرفته و همهی بازهها را براساس اینکه کدامیک جای مناسبتری برای نشستن دارند، در آن ذخیره کنیم. سپس هر بار مناسبترین بازه را برداریم و تماشاچی را در صندلی موردنظر (که همواره یا چپترین یا راستترین یا یکی از صندلیهای وسطی است) برداریم و این بازه را به حداکثر دو بازهی دیگر تقسیم کرده و مجدداً به set
اضافه کنیم.
با این کار خواستهی مسئله را شبیهسازی میکنیم. باتوجه به اینکه حذف و اضافه کردن در set
از مرتبهی log تعداد اعضای داخل آن است و چون این تعداد حداکثر nm است، هر حذف و اضافه حداکثر از مرتبهی
O(lognm)=O(logn+logm)
است. پس پیچیدگی زمانی در کل برابر است با:
O((nm+k)×(logn+logm))
اگر یک دنباله مثل a1,a2,…,an هندسیوار باشد. عدد صحیح A و عدد گویای q چنان موجود است که:
a1=A,a2=Aq,a3=Aq2,…,an=A.qn−1
همچنین میتوان ثابت کرد که اگر یک جدول n×m «جذابوار» باشد، عدد صحیح A و اعداد گویای p و q چنان موجودند که:
a1,1=A,a1,2=A.q,a1,3=A.q2…,a1,m=A.qm−1a2,1=A.p,a2,2=A.p.q,a2,3=A.p.q2…,a2,m=A.p.qm−1a3,1=A.p2,a3,2=A.p2.q,a3,3=A.p2.q2…,a3,m=A.p2.qm−1…an,1=A.pn−1,an,2=A.pn−1.q,an,3=A.pn−1.q2…,an,m=A.pn−1.qm−1
راهحل اول
خانهی سطر iام ستون jام را در نظر بگیرید. U[i][j] یعنی حداکثر چند خانه باید از خانهی سطر iام ستون jام بالا برویم تا دنباله هندسی بماند.
بهطور مشابه منظور از L[i][j] این است که حداکثر چند خانه از خانهی سطر iام ستون jام به سمت چپ برویم تا دنباله هندسی بماند.
حال اگر یک سر مثل i را فیکس کنیم. با درنظر گرفتن U[i][j]های مختلف، انگار یک هیستوگرام داریم که دنبال بزرگترین زیرمستطیل آن هستیم.
البته اگر بازهی [jl,jr] از ستونها یک کاندید بود، باید دو سطر آن را به کمک آرایهی L بررسی کنید و اشتراک بگیرید که آیا این زیرمستطیل ساختنی است یا نه.
پیچیدگی زمانی: O(nm)
راهحل دوم
توجه کنید اگر یک دنبالهی هندسی، ناثابت باشد، طول آن نمیتواند از ۳۲ بیشتر باشد. بنابراین همهی زیرمستطیلهای جذابوار سه حالت دارند.
- سطری و ستونی غیرثابت هستند و ابعاد آنها از ۳۲ بیشتر نمیشود.
- سطری و ستونی یکی ثابت و دیگری غیرثابت است، در این حالت یکی از ابعاد از ۳۲ بیشتر نمیشود و تشکیل یک دنبالهی هندسی میدهد ولی در بعد دیگر صرفاً کپی شده است.
- سطری و ستونی ثابت است؛ یعنی یک زیرمستطیل است که همهی اعداد آن برابر است.
بررسی ۳ حالت فوق، مشابه مسئلهی پیدا کردن بزرگترین زیرمستطیل است.
لم اول. میتوان فرض کرد ابتدا همهی عملیاتهای جمع را انجام میدهیم و سپس به سراغ عملیاتهای ضرب میرویم. پس در واقع باید این n عدد را به تعدادی دسته افراز کنیم و مجموع اعداد هر دسته را در هم ضرب کنیم.
لم دوم. اگر x و y دو عددِ صحیح بزرگتر یا مساوی 2 باشند، میتوان بهجای نوشتن جمع آنها (x+y)، ضرب آنها (xy) را نوشت؛ زیرا به عددی بزرگتر یا مساوی میرسیم.
لم سوم. اگر همهی اعداد ورودی 1 باشند، بزرگترین عددی که میتوان ساخت از تقریباً سهتاسهتا دستهبندیکردنِ این اعداد است. بهطور دقیقتر:
- اگر n بر 3 بخشپذیر بود، 3n دستهی سهتایی میسازیم.
- اگر n بر 3 باقیماندهی 1 داشت، 3n−4 دستهی سهتایی و دو دستهی دوتایی میسازیم. (حالت n=1 را جدا در نظر بگیرید.)
- اگر n بر 3 باقیماندهی 2 داشت، 3n−2 دستهی سهتایی و یک دستهی دوتایی میسازیم.
لم چهارم. طبق لم سوم، هر عدد بزرگتر یا مساوی 2 در یک دستهی جدا قرار میگیرد. میتوان ثابت کرد در حالت بهینه، میتوان حداکثر یک عدد 1 در دستهی اعدادِ بزرگتر یا مساوی 2 قرار داد.
لم پنجم. ساختن یک دسته با 1ها الویت کمتری نسبت به اضافه کردن 1 به یک دستهی دیگر دارد. همچنین اگر بخواهیم یک 1 به یک دسته اضافه کنیم، بهتر است عدد آن دسته از همه کوچکتر باشد.
پیچیدگی زمانی: O(nlog(n))