QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 1024 MB Total points: 150

#4080. الأقراص السحرية

Statistics

بعد أن أتعبته دراسة الخوارزميات المستمرة قليلًا، فكر 경근 أن الراحة في عالم آخر لبضعة أيام ستكون أمرًا جيدًا. وذات يوم أخبره 상수 بمكان باب يؤدي إلى عالم آخر، فذهب إليه. كان الباب مغلقًا وعليه قفل كبير ذو أقراص يمكن فتحه به.

يتكون القفل من $M$ قرص مرتبة رأسيًا. لكل قرص $R$ خانة، ويمكن تدويره يسارًا أو يمينًا بمقدار عدد صحيح من الخانات. قد تحتوي الخانة على نقطة وقد لا تحتوي. في كل قرص نقطة واحدة على الأقل. ينفتح الباب إذا دُوّرت الأقراص بحيث تحتوي جميع خانات عمود رأسي واحد في موضع ما على نقاط. تدور الأقراص بصورة مستقلة. ولأنها ثقيلة جدًا ويصعب تدويرها، نريد تقليل مجموع أعداد الخانات التي تدور خلالها.

problem_4080_399011c515048b45204301f16f476f85.png

يبين الشكل أعلاه مثالًا. إحدى الطرق المثلى هي تدوير القرص الأول من الأعلى خانة واحدة يسارًا، والثاني خانتين يسارًا، والثالث خانة واحدة يمينًا، وترك الرابع دون تدوير، بمجموع 4 خانات.

اكتب برنامجًا يتلقى أحجام الأقراص ومواضع النقاط ويحدد كيفية فتح الباب بأقل مجموع دوران. يُعطى موضع النقطة بزوج من رقم القرص ورقم الخانة. رقم القرص العلوي 0، وتزداد الأرقام بمقدار 1 نزولًا، فيكون رقم السفلي $M-1$. لترقيم الخانات، تُختار خانات أي موضع مشترك (عمود رأسي واحد) لتكون الخانة 0. تزداد الأرقام بمقدار 1 إلى اليمين، وتقع الخانة $R-1$ يسار الخانة 0. لا تتطابق إحداثيات نقطتين معطاتين.

long long findMinClicks( int M, int R, vector< pair<int, int> > P )

$M$ هو عدد الأقراص، و$R$ عدد الخانات في كل قرص. $P$ مصفوفة من $N$ زوجًا من قيم int. العدد الأول في كل زوج هو رقم القرص والثاني رقم الخانة. لا تتكرر الإحداثيات. يجب أن تعيد findMinClicks() أقل مجموع لأعداد الخانات التي يجب تدوير الأقراص خلالها لفتح الباب.

تفاصيل التنفيذ

يجب تقديم ملف واحد بالضبط اسمه dial.cpp، وأن ينفذ الدالة التالية.

long long findMinClicks( int M, int R, vector< pair<int, int> > P )

يجب أن تعمل الدالة كما وُصف أعلاه. يمكن إنشاء دوال أخرى واستخدامها داخليًا. لا يجوز للكود المقدم إجراء إدخال/إخراج أو الوصول إلى ملفات أخرى.

مثال برنامج التقييم

يقرأ برنامج التقييم المرفق الإدخال بالتنسيق التالي.

  • السطر 1: الأعداد الصحيحة $N$ و$M$ و$R$.
  • الأسطر من 2 إلى $N+1$: العددان الصحيحان $D_i$ و$C_i$.

هنا $(D_i,C_i)$ هما إحداثيا النقطة $i$. يطبع برنامج التقييم في سطر واحد القيمة التي تعيدها دالتك findMinClicks().

القيود

  • $1\le R\le10^9$, $1\le N\le\min(MR,500\,000)$, $1\le M\le N$.

المهام الفرعية

المهمة الفرعية 1 (10 نقاط)

  • $1\le N\le5\,000$, $1\le R\le5\,000$.

المهمة الفرعية 2 (15 نقاط)

  • $1\le M\le5\,000$, $1\le R\le5\,000$.

المهمة الفرعية 3 (16 نقاط)

  • $1\le N\le5\,000$.

المهمة الفرعية 4 (109 نقاط)

لا توجد قيود إضافية.

أمثلة

الإدخال 1

7 4 20
1 3
0 2
2 6
3 8
3 1
2 0
1 8

يُعرض أدناه مثال لتنفيذ الكود على الإدخال السابق.

الاستدعاء القيمة المعادة
findMinClicks( 7, 4, 20, { {1, 3}, {0, 2}, {2, 6}, {3, 8}, {3, 1}, {2, 0}, {1, 8} } ) 4

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.