From edd44267808ef55b82c9baf4a76baa41c38fe991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=9B=D0=B0?= =?UTF-8?q?=D0=B2=D1=88=D0=BE=D0=BD=D0=BE=D0=BA?= <114582703+valavshonok@users.noreply.github.com> Date: Tue, 28 Oct 2025 17:02:26 +0300 Subject: [PATCH] statenent tmp --- src/App.tsx | 3 +- src/views/problem/statement/Proble.tsx | 192 ++++++++++++++++++++++ src/views/problem/statement/Statement.tsx | 37 ++++- 3 files changed, 225 insertions(+), 7 deletions(-) create mode 100644 src/views/problem/statement/Proble.tsx diff --git a/src/App.tsx b/src/App.tsx index 3a5d6ff..fd375fb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,7 @@ import { Route, Routes } from "react-router-dom"; import Home from "./pages/Home"; import CodeEditor from "./views/problem/codeeditor/CodeEditor"; import Statement from "./views/problem/statement/Statement"; +import ProblemStatement from "./views/problem/statement/Proble"; function App() { return ( @@ -15,7 +16,7 @@ function App() { }/> }/> }/> - }/> + }/> {/* }; + typesetPromise?: (elements?: Element[]) => Promise; + [key: string]: any; + }; + } +} + +export default function ProblemStatement() { + const containerRef = useRef(null); +const legend = "В честь юбилея ректорат ЮФУ решил запустить акцию <<Сто и десять кексов>>. \r\n\r\n $x$, $a_i^2 + b_i^2 \le a_{i+1}^2$ В каждом корпусе университета открылась лавка с кексами, в которой каждый студент может получить бесплатные кексы.\r\n\r\nНе прошло и пары минут после открытия, как к лавкам набежали студенты и образовалось много очередей. Но самая большая очередь образовалась в главном корпусе ЮФУ. Изначально в этой очереди стояло $n$ студентов, но потом в течение следующих $m$ минут какие-то студенты приходили и вставали в очередь, а какие-то уходили.\r\n\r\nЗа каждым студентом закреплен номер его зачетной книжки, будем называть это число номером студента. У каждого студента будет уникальный номер, по которому можно однозначно его идентифицировать. Будем считать, что каждую минуту происходило одно из следующих событий:\r\n\r\n\\begin{enumerate}\r\n \\item Студент с номером $x$ пришел и встал перед студентом с номером $y$;\r\n \\item Студент с номером $x$ пришел и встал в конец очереди;\r\n \\item Студент с номером $x$ ушел из очереди; возможно, он потом вернется.\r\n\\end{enumerate}\r\n\r\nАналитикам стало интересно, а какой будет очередь после $m$ минут? \r\n\r\nПомогите им и сообщите конечное состояние очереди.\r\n\r\n"; + const htmlContent = ` +
+
+
Очередь за кексами
+
+
ограничение по времени на тест
1 секунда +
+
+
ограничение по памяти на тест
256 мегабайт +
+
+
ввод
стандартный ввод +
+
+
вывод
стандартный вывод +
+
+
+

+ \\bf{test} + $$$x$$$, $$$a_i^2 + b_i^2 \\le a_{i+1}^2$$$ + Some complex formula: $$$P(|S - E[S]| \\ge t) \\le 2 \\exp \\left( -\\frac{2 t^2 n^2}{\\sum_{i = 1}^n (b_i - a_i)^2} \\right).$$$ + В честь юбилея ректорат ЮФУ решил запустить акцию «Сто и десять кексов». В каждом корпусе + университета открылась лавка с кексами, в которой каждый студент может получить бесплатные кексы.

+

Не прошло и пары минут после открытия, как к лавкам набежали студенты и образовалось много очередей. Но + самая большая очередь образовалась в главном корпусе ЮФУ. Изначально в этой очереди стояло $$$n$$$ + студентов, но потом в течение следующих $$$m$$$ минут какие-то студенты приходили и вставали в очередь, + а какие-то уходили.

+

За каждым студентом закреплен номер его зачетной книжки, будем называть это число номером студента. У + каждого студента будет уникальный номер, по которому можно однозначно его идентифицировать. Будем + считать, что каждую минуту происходило одно из следующих событий:

+

+
    +
  1. Студент с номером $$$x$$$ пришел и встал перед студентом с номером $$$y$$$;
  2. +
  3. Студент с номером $$$x$$$ пришел и встал в конец очереди;
  4. +
  5. Студент с номером $$$x$$$ ушел из очереди; возможно, он потом вернется.
  6. +
+

+

Аналитикам стало интересно, а какой будет очередь после $$$m$$$ минут?

+

Помогите им и сообщите конечное состояние очереди.

+
+

+

+
+
Входные данные
+

+

В первой строке заданы два целых числа $$$n$$$ и $$$m$$$ $$$(1 \\le n, m \\le 10^5)$$$ — текущее + число студентов в очереди и количество изменений.

+

В следующей строке задается $$$n$$$ целых различных чисел $$$a_1, + a_2, \\cdots , a_n$$$ $$$(1 \\le a_i \\le 10^9)$$$, где $$$a_i$$$ — номер студента, который + стоит на $$$i$$$-й позиции в очереди.

+

В следующих $$$m$$$ строках идет описание запросов изменения очереди.

+

В каждой строке в зависимости от типа запроса задается два или три числа. Первое число $$$t_j$$$ $$$(1 + \\le t_j \\le 3)$$$ — тип события, которое произошло в $$$j$$$-ю минуту.

+

Если $$$t_j = \\textbf{1}$$$, то в строке задается еще 2 числа $$$x$$$ $$$(1 \\le x_j \\le 10^9)$$$ и + $$$y$$$ $$$(1 \\le y_j \\le 10^9)$$$ — номер студента, который пришел, и номер студента, перед + которым он встанет в очереди. Гарантируется, что студент с номером $$$x$$$ ещё не занял очередь, а + студент с номером $$$y$$$ уже стоит в ней.

+

Если $$$t_j = \\textbf{2}$$$, то в строке задается еще 1 число $$$x$$$ $$$(1 \\le x_j \\le + 10^9)$$$ — номер студента, который пришел и встал в конец очереди. Гарантируется, что студент + с номером $$$x$$$ ещё не занял очередь.

+

Если $$$t_j = \\textbf{3}$$$, то в строке задается еще 1 число $$$x$$$ $$$(1 \\le x_j \\le + 10^9)$$$ — номер студента, который ушел из очереди. Гарантируется, что студент с номером + $$$x$$$ стоит в очереди.

+
+

+

+
+
Выходные данные
+

+

В первой строке выведите одно число $$$|a|$$$ — длину очереди после выполнения всех запросов + изменения.

+

В следующей строке выведите $$$|a|$$$ чисел $$$a_1, a_2, \\cdots , a_{|a|}$$$, где $$$a_i$$$ — + номер студента, который стоит на $$$i$$$-й позиции в очереди.

+
+

+

+
+
Пример
+

+

+
+
+
Входные данные
+
+
7 6
1 2 3 4 5 6 7
1 8 3
2 9
3 3
1 3 9
2 10
3 1
+
+
+
Выходные данные
+
+9
+2 8 4 5 6 7 3 9 10 
+
+
+
+
+

+

+
+
Примечание
+

+

Изначально очередь выглядит следующим образом:

+

+

В первую минуту приходит студент с номером 8 и встает перед студентом с номером 3.

+

+

Потом студент с номером 9 встает в конец очереди.

+

+

Студент с номером 3 уходит из очереди.

+

+

Потом он возвращается и становится перед студентом с номером 9.

+

+

После в конец очереди становится студент с номером 10.

+

+

И студент с номером 1 уходит из очереди.

+

+

После $$$m$$$ событий очередь имеет следующий вид:

+

+
+
+

+

+ + `; + + useEffect(() => { + // 1️⃣ Конфигурация MathJax + (window as any).MathJax = { + tex: { + inlineMath: [["$$$", "$$$"]], // наш формат + displayMath: [["$$$$$$", "$$$$$$"]], + processEscapes: true, + }, + options: { + skipHtmlTags: ["script", "noscript", "style", "textarea", "pre", "code"], + }, + startup: { + typeset: false, + }, + }; + + // 2️⃣ Подключаем MathJax + const script = document.createElement("script"); + script.src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"; + script.async = true; + + script.onload = () => { + if (window.MathJax?.startup?.promise) { + window.MathJax.startup.promise.then(() => renderMath()); + } else { + renderMath(); + } + }; + + document.head.appendChild(script); + + // 3️⃣ Отрисовка формул + const renderMath = () => { + if (containerRef.current && window.MathJax?.typesetPromise) { + window.MathJax.typesetPromise([containerRef.current]).catch(console.error); + } + }; + + return () => { + script.remove(); + }; + }, []); + + return
; +} diff --git a/src/views/problem/statement/Statement.tsx b/src/views/problem/statement/Statement.tsx index 90a4ac6..16cd153 100644 --- a/src/views/problem/statement/Statement.tsx +++ b/src/views/problem/statement/Statement.tsx @@ -1,9 +1,37 @@ import React, { useState } from "react"; import { cn } from "../../../lib/cn"; - +// import FullLatexRenderer from "./FullLatexRenderer"; const Statement: React.FC = () => { +const data = { + "extraResources": { + "example.01.mu": "TVXzATcgNg0KMSAyIDMgNCA1IDYgNw0KMSA4IDMNCjIgOQ0KMyAzDQoxIDMgOQ0KMiAxMA0KMyAxDQo=" + }, + "scoring": null, + "notes": "Изначально очередь выглядит следующим образом:\r\n\r\n\\includegraphics{o1.png}\r\n\r\nВ первую минуту приходит студент с номером 8 и встает перед студентом с номером 3.\r\n\r\n\\includegraphics{o2.png}\r\n\r\nПотом студент с номером 9 встает в конец очереди.\r\n\r\n\\includegraphics{o3.png}\r\n\r\nСтудент с номером 3 уходит из очереди.\r\n\r\n\\includegraphics{o4.png}\r\n\r\nПотом он возвращается и становится перед студентом с номером 9.\r\n\r\n\\includegraphics{o5.png}\r\n\r\nПосле в конец очереди становится студент с номером 10.\r\n\r\n\\includegraphics{o6.png}\r\n\r\nИ студент с номером 1 уходит из очереди.\r\n\r\n\\includegraphics{o7.png}\r\n\r\nПосле $m$ событий очередь имеет следующий вид:\r\n\r\n\\includegraphics{o8.png}", + "legend": "В честь юбилея ректорат ЮФУ решил запустить акцию <<Сто и десять кексов>>. \r\n\r\n $x$, $a_i^2 + b_i^2 \le a_{i+1}^2$ В каждом корпусе университета открылась лавка с кексами, в которой каждый студент может получить бесплатные кексы.\r\n\r\nНе прошло и пары минут после открытия, как к лавкам набежали студенты и образовалось много очередей. Но самая большая очередь образовалась в главном корпусе ЮФУ. Изначально в этой очереди стояло $n$ студентов, но потом в течение следующих $m$ минут какие-то студенты приходили и вставали в очередь, а какие-то уходили.\r\n\r\nЗа каждым студентом закреплен номер его зачетной книжки, будем называть это число номером студента. У каждого студента будет уникальный номер, по которому можно однозначно его идентифицировать. Будем считать, что каждую минуту происходило одно из следующих событий:\r\n\r\n\\begin{enumerate}\r\n \\item Студент с номером $x$ пришел и встал перед студентом с номером $y$;\r\n \\item Студент с номером $x$ пришел и встал в конец очереди;\r\n \\item Студент с номером $x$ ушел из очереди; возможно, он потом вернется.\r\n\\end{enumerate}\r\n\r\nАналитикам стало интересно, а какой будет очередь после $m$ минут? \r\n\r\nПомогите им и сообщите конечное состояние очереди.\r\n\r\n", + "authorLogin": "valavshonok", + "language": "russian", + "timeLimit": 1000, + "output": "В первой строке выведите одно число $|a|$~--- длину очереди после выполнения всех запросов изменения.\r\n\r\nВ следующей строке выведите $|a|$ чисел $a_1, a_2, \\cdots , a_{|a|}$, где $a_i$~--- номер студента, который стоит на $i$-й позиции в очереди.", + "inputFile": "stdin", + "outputFile": "stdout", + "input": "В первой строке заданы два целых числа $n$ и $m$ $(1 \\le n, m \\le 10^5)$~--- текущее число студентов в очереди и количество изменений.\r\n\r\nВ следующей строке задается $n$ целых \\textbf{различных} чисел $a_1, a_2, \\cdots , a_n$ $(1 \\le a_i \\le 10^9)$, где $a_i$~--- номер студента, который стоит на $i$-й позиции в очереди.\r\n\r\nВ следующих $m$ строках идет описание запросов изменения очереди.\r\n\r\nВ каждой строке в зависимости от типа запроса задается два или три числа. Первое число $t_j$ $(1 \\le t_j \\le 3)$~--- тип события, которое произошло в $j$-ю минуту.\r\n\r\nЕсли $t_j = \\textbf{1}$, то в строке задается еще 2 числа $x$ $(1 \\le x_j \\le 10^9)$ и $y$ $(1 \\le y_j \\le 10^9)$~--- номер студента, который пришел, и номер студента, перед которым он встанет в очереди. Гарантируется, что студент с номером $x$ ещё не занял очередь, а студент с номером $y$ уже стоит в ней. \r\n\r\nЕсли $t_j = \\textbf{2}$, то в строке задается еще 1 число $x$ $(1 \\le x_j \\le 10^9)$~--- номер студента, который пришел и встал в конец очереди. Гарантируется, что студент с номером $x$ ещё не занял очередь.\r\n\r\nЕсли $t_j = \\textbf{3}$, то в строке задается еще 1 число $x$ $(1 \\le x_j \\le 10^9)$~--- номер студента, который ушел из очереди. Гарантируется, что студент с номером $x$ стоит в очереди.", + "authorName": "Виталий Лавшонок", + "sampleTests": [ + { + "output": "9\r\n2 8 4 5 6 7 3 9 10 \r\n", + "input": "7 6\r\n1 2 3 4 5 6 7\r\n1 8 3\r\n2 9\r\n3 3\r\n1 3 9\r\n2 10\r\n3 1\r\n", + "inputFile": "example.01", + "outputFile": "example.01.a" + } + ], + "name": "Очередь за кексами", + "interaction": null, + "memoryLimit": 268435456, + "tutorial": "Давайте просто промоделируем все действия.\r\n\r\nЗаведем список элементов, а также сохраним по ключу $x$ указатель на элемент списка. Мы можем это сделать, так как все элементы различны. Например, в С++ можно просто завести коллекцию list, а также map::iterator> или реализовать свой список.\r\n\r\nТеперь мы можем легко обрабатывать все запросы, а в конце просто выведем весь список.\r\n\r\nЗапрос 1-го типа можно обработать так: просто берем по ключу указатель на нужный элемент и вставляем перед ним другой элемент, останется только по ключу $x$ записать указатель на новый элемент.\r\n\r\nЗапрос 2-го типа~--- просто добавить в список элемент в конец и сохранить на него указатель.\r\n\r\nЗапрос 3-го типа~--- удаляем из списка элемент по его указателю.\r\n\r\nВ конце просто выводим массив.\r\n\r\nИтоговая сложность $O(mlog(n))$" +}; return (
@@ -24,14 +52,11 @@ const Statement: React.FC = () => {
- Три друга хотят встретиться друг с другом. Изначально первый друг находится в позиции x = a, второй друг находится в позиции x = b, а третий находится в позиции x = c на координатной оси Ox. -За одну минуту каждый из друзей независимо от других друзей может изменить позицию x на 11 влево или на 11 вправо (то есть присвоить x := x − 1 или x := x + 1), или даже не менять ее. -Введем понятие суммарной попарной дистанции — суммы дистанций между каждой парой друзей. Пусть a′, b′ и c′ — финальные позиции первого, второго и третьего друзей соответственно. Тогда суммарная попарная дистанция
равна |a′ − b′| + |a′ − c′| + |b′ − c′|, где |x| — абсолютная величина (модуль) значения x. -Друзья интересуются, какой минимальной суммарной попарной дистанции они смогут достичь, если они будут двигаться оптимально. Каждый из друзей сдвинется не более одного раза. Таким образом, более формально, они хотят знать минимальную суммарную попарную дистанцию, которой они могут достичь спустя одну минуту. + {/* */}
); }; -export default Statement; +export default Statement; \ No newline at end of file