سلام دوست عزیز😃👋

به مسابقه «هم‌کد ۵ - Software Engineering» خوش آمدی!

هرگونه ارتباط با سایر شرکت‌کنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکت‌کنندگان مسابقه حذف می‌شوید. سوالات و مشکلات خودتان را می‌توانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.

لینک‌های مفید برای شرکت در مسابقه:

سوال «المپیکیوس» سوال پایگاه‌داده و سایر سوالات جنبه‌ی الگوریتمی دارند. پیشنهاد می‌کنیم همه‌ی سوالات را بخوانید و برای حل آن‌ها تلاش کنید.

موفق باشید و بهتون خوش بگذره 😉✌

ترتیب در گولنگستان


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

در زبان برنامه‌نویسی گولنگستان متغیرها حافظه‌های ۱، ۲، ۳ یا ۴ بایتی دارند. وقتی یک شئ با nn متغیر به حجم‌های s1,s2,,sns_1, s_2, \dots, s_n\, تعریف می‌کنیم. حافظه‌ها با قاعده‌ی زیر در بسته‌های ۴ بایتی، پشت سرهم قرار می‌گیرند.

متغیرها را به ترتیب اضافه می‌کنیم. اگر متغیری که نوبت اضافه شدن آن است، به انتهای بسته‌ی قبلی می‌تواند اضافه شود، آن را اضافه می‌کنیم و به سراغ متغیر بعدی (در صورت وجود) می‌رویم. اما اگر این متغیر نمی‌تواند به انتهای بسته‌ی آخر اضافه شود، همه‌ی فضای خالی آن را رها می‌کنیم و آن بسته را می‌بندیم (اصطلاحاً به این حافظه‌های تلف شده padding space می‌گویند). سپس در یک بسته‌ی ۴ بایتی جدید، حافظه مورد نیاز متغیر بعدی را به بایت‌های اول آن اختصاص می‌دهیم.

برای مثال فرض کنید n=3n = 3 متغیر داشته باشیم: s1=1s_1 = 1، s2=4s_2 = 4 و s3=1s_3 = 1. در این صورت متغیر s1s_1 در ابتدای یک بسته قرار می‌گیرد، چون متغیر s2s_2 را نمی‌توان به همان بسته اضافه کرد، پس ۳ بایت باقی‌مانده‌ی بسته‌ی اول را padding space در نظر می‌گیریم. سپس متغیر s2s_2 را در یک بسته‌ی جدید قرار داده و در نهایت s3s_3 را در بایت اول یک بسته قرار می‌دهیم. (در آخرین بسته padding space نداریم.)

به این ترتیب وضعیت نوار حافظه به صورت زیر خواهد بود و در مجموع ۳ حافظه تلف شده خواهیم داشت.

حالت اول

حال می‌دانیم اگر ترتیب این سه متغیر را به این صورت که s1=4s_1 = 4، s2=1s_2 = 1 و s3=1s_3 = 1 عوض می‌کردیم. وضعیت نوار حافظه به این صورت تغییر می‌کرد و هیچ حافظه‌ای تلف نمی‌شود.

حالت دوم

حال به شما ترتیب اولیه حافظه متغیرها داده می‌شود از شما می‌خواهیم ترتیب آن‌ها را طوری تغییر دهید که حافظه‌های تلف شده (padding space) کمینه شود و در نهایت این کمینه مقدار را چاپ کنید.

ورودی🔗

در سطر اول ورودی، عدد صحیح و مثبت tt آمده که تعداد سناریوها را نشان می‌دهد.

1t10001 \leq t \leq 1000

در سطر اول هر سناریو، عدد صحیح nn که نشان دهنده‌ی تعداد متغیرها است داده می‌شود.

1n1001 \leq n \leq 100

در سطر دوم هر سناریو، nn عدد صحیح که مقدار حافظه‌ی متغیرها یعنی s1,s2,,sns_1, s_2, \dots, s_n\, را نشان می‌دهد.

1si41 \leq s_i \leq 4

خروجی🔗

در tt سطر برای هر سناریو، کمینه حافظه‌ی تلف شده (padding space) در بین تمام ترتیب‌های مختلف برای متغیرها را چاپ کنید.

مثال‌ها🔗

ورودی نمونه ۱🔗

4
3
1 4 1
4
4 2 3 4
1
1
5
3 3 3 3 3
Plain text

خروجی نمونه ۱🔗

0
1
0
4
Plain text

سناریو اول در صورت سوال توضیح داده شده.

یک نمونه از ترتیب بهینه، برای سناریو دوم، با ۱ حافظه تلف شده، به صورت زیر است:

توضیح نمونه ۲

تنها ترتیب ممکن، برای سناریو سوم، با ۰ حافظه‌ی تلف شده، به صورت زیر است:

توضیح نمونه ۳

تنها ترتیب ممکن، برای سناریو چهارم، با ۴ حافظه‌ی تلف شده، به صورت زیر است:

توضیح نمونه ۴

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.