{"trustable":true,"prependHtml":"\u003cstyle type\u003d\"text/css\"\u003e\n #problem-body \u003e pre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333;\n background: rgba(255, 255, 255, 0.5);\n border: 1px solid #ccc;\n border-radius: 6px;\n }\n\u003c/style\u003e\n","sections":[{"title":"","value":{"format":"HTML","content":"\u003cdiv id\u003d\"problem-body\"\u003e\n\t\u003cp align\u003d\"justify\"\u003e\r\nاكتب برنامجًا يجد كل حدوث لنمط معين في سلسلة الإدخال المعطاة. يُشار إلى هذا في كثير من الأحيان باسم البحث عن \u003cem\u003eإبرة\u003c/em\u003e في \u003cem\u003eكومة القش\u003c/em\u003e.\u003c/p\u003e\r\n\u003cp\u003eيجب على البرنامج اكتشاف \u003cstrong\u003eجميع\u003c/strong\u003e حالات حدوث الإبرة في كومة القش. يجب أن يأخذ الإبرة وكومة القش كإدخال، ويخرج مواقع كل حدوث، كما هو موضح أدناه.\r\nالتنفيذ المقترح هو خوارزمية KMP، ولكن هذا ليس شرطًا. ومع ذلك، فإن النهج الساذج سيتجاوز على الأرجح الحد الزمني، بينما الخوارزميات الأخرى أكثر تعقيدًا... الخيار لك.\u003c/p\u003e\r\n\u003ch3\u003eالإدخال\u003c/h3\u003e\r\n\u003cp\u003eيتكون الإدخال من عدد من حالات الاختبار. يتكون كل حالة اختبار من ثلاثة أسطر، تحتوي على:\u003c/p\u003e\r\n\u003cdiv align\u003d\"left\"\u003e\r\n\u003cul\u003e\r\n\t\u003cli\u003eطول الإبرة،\u003c/li\u003e\r\n\t\u003cli\u003eالإبرة نفسها،\u003c/li\u003e\r\n\t\u003cli\u003eكومة القش.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eطول الإبرة محدود فقط بالذاكرة المتاحة لبرنامجك، لذا لا تفترض شيئًا - بدلاً من ذلك، اقرأ الطول وقم بتخصيص الذاكرة حسب الحاجة. كومة القش غير محدودة الحجم، مما يعني أن برنامجك لا ينبغي أن يقرأ كومة القش بأكملها دفعة واحدة. تعتمد خوارزمية KMP على التدفق، أي أنها تعالج كومة القش حرفًا بحرف، لذا هذا ليس مشكلة.\u003c/p\u003e\r\n\u003cp\u003eتأتي حالات الاختبار واحدة تلو الأخرى، كل منها يشغل ثلاثة أسطر، دون وجود مسافة إضافية أو فواصل بينها.\u003c/p\u003e\r\n\u003ch3\u003eالإخراج\u003c/h3\u003e\r\n\u003cp\u003eيجب على برنامجك لكل حالة اختبار إخراج جميع مواقع حدوث الإبرة داخل كومة القش. إذا تم العثور على تطابق، يجب أن يحتوي الإخراج على موقع أول حرف من التطابق. يتم ترقيم الحروف في كومة القش بدءًا من الصفر.\u003c/p\u003e\r\n\u003cp\u003eبالنسبة لحالة الاختبار المعطاة، يجب أن تكون المواقع المخرجة مرتبة ترتيبًا تصاعديًا، ويجب طباعة كل منها في سطر منفصل. بالنسبة لحالتي اختبار مختلفتين، يجب أن تكون المواقع مفصولة بسطر فارغ.\u003c/p\u003e\r\n\u003ch3\u003eمثال\u003c/h3\u003e\r\n\u003cpre\u003e\u003cb\u003eSample input:\u003c/b\u003e\r\n2\r\nna\r\nbanananobano\r\n6\r\nfoobar\r\nfoo\r\n9\r\nfoobarfoo\r\nbarfoobarfoobarfoobarfoobarfoo\u003c/pre\u003e\r\n\r\n\u003cpre\u003e\u003cb\u003eSample output:\u003c/b\u003e\r\n2\r\n4\r\n\r\n3\r\n9\r\n15\r\n21\r\n\u003c/pre\u003e\r\n\u003cp\u003eلاحظ السطر الفارغ المزدوج في الإخراج، مما يعني عدم العثور على تطابق لحالة الاختبار الثانية.\u003c/p\u003e\r\n\u003cb\u003eتحذير: بيانات الإدخال/الإخراج كبيرة، كن حذرًا مع بعض اللغات\u003c/b\u003e\n\u003c/div\u003e"}}]}