statenent tmp

This commit is contained in:
Виталий Лавшонок
2025-10-28 17:02:26 +03:00
parent 330450c272
commit edd4426780
3 changed files with 225 additions and 7 deletions

View File

@@ -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() {
<Route path="/home/*" element={<Home/>}/>
<Route path="/editor" element={<div className="box-border p-[50px] w-full h-[800px] relative bg-red-8001"><CodeEditor/></div>}/>
<Route path="/statement" element={<div className="box-border p-[50px] w-full h-[800px] relative bg-red-8001"><Statement/></div>}/>
<Route path="*" element={<Home/>}/>
<Route path="*" element={<ProblemStatement/>}/>
</Routes>
{/* <Switch

View File

@@ -0,0 +1,192 @@
import { useEffect, useRef } from "react";
declare global {
interface Window {
MathJax?: {
startup?: { promise?: Promise<void> };
typesetPromise?: (elements?: Element[]) => Promise<void>;
[key: string]: any;
};
}
}
export default function ProblemStatement() {
const containerRef = useRef<HTMLDivElement>(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 = `
<DIV class="problem-statement">
<DIV class="header">
<DIV class="title">Очередь за кексами</DIV>
<DIV class="time-limit">
<DIV class="property-title">ограничение по времени на тест</DIV>1 секунда
</DIV>
<DIV class="memory-limit">
<DIV class="property-title">ограничение по памяти на тест</DIV>256 мегабайт
</DIV>
<DIV class="input-file input-standard">
<DIV class="property-title">ввод</DIV>стандартный ввод
</DIV>
<DIV class="output-file output-standard">
<DIV class="property-title">вывод</DIV>стандартный вывод
</DIV>
</DIV>
<DIV class="legend">
<P>
\\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).$$$
В честь юбилея ректорат ЮФУ решил запустить акцию &laquo;Сто и десять кексов&raquo;. В каждом корпусе
университета открылась лавка с кексами, в которой каждый студент может получить бесплатные кексы.</P>
<P>Не прошло и пары минут после открытия, как к лавкам набежали студенты и образовалось много очередей. Но
самая большая очередь образовалась в главном корпусе ЮФУ. Изначально в этой очереди стояло $$$n$$$
студентов, но потом в течение следующих $$$m$$$ минут какие-то студенты приходили и вставали в очередь,
а какие-то уходили.</P>
<P>За каждым студентом закреплен номер его зачетной книжки, будем называть это число номером студента. У
каждого студента будет уникальный номер, по которому можно однозначно его идентифицировать. Будем
считать, что каждую минуту происходило одно из следующих событий:</P>
<P></P>
<OL>
<LI> Студент с номером $$$x$$$ пришел и встал перед студентом с номером $$$y$$$; </LI>
<LI> Студент с номером $$$x$$$ пришел и встал в конец очереди; </LI>
<LI> Студент с номером $$$x$$$ ушел из очереди; возможно, он потом вернется. </LI>
</OL>
<P></P>
<P>Аналитикам стало интересно, а какой будет очередь после $$$m$$$ минут? </P>
<P>Помогите им и сообщите конечное состояние очереди.</P>
</DIV>
<P></P>
<P></P>
<DIV class="input-specification">
<DIV class="section-title">Входные данные</DIV>
<P></P>
<P>В первой строке заданы два целых числа $$$n$$$ и $$$m$$$ $$$(1 \\le n, m \\le 10^5)$$$&nbsp;&mdash; текущее
число студентов в очереди и количество изменений.</P>
<P>В следующей строке задается $$$n$$$ целых <SPAN class="tex-font-style-bf">различных</SPAN> чисел $$$a_1,
a_2, \\cdots , a_n$$$ $$$(1 \\le a_i \\le 10^9)$$$, где $$$a_i$$$&nbsp;&mdash; номер студента, который
стоит на $$$i$$$-й позиции в очереди.</P>
<P>В следующих $$$m$$$ строках идет описание запросов изменения очереди.</P>
<P>В каждой строке в зависимости от типа запроса задается два или три числа. Первое число $$$t_j$$$ $$$(1
\\le t_j \\le 3)$$$&nbsp;&mdash; тип события, которое произошло в $$$j$$$-ю минуту.</P>
<P>Если $$$t_j = \\textbf{1}$$$, то в строке задается еще 2 числа $$$x$$$ $$$(1 \\le x_j \\le 10^9)$$$ и
$$$y$$$ $$$(1 \\le y_j \\le 10^9)$$$&nbsp;&mdash; номер студента, который пришел, и номер студента, перед
которым он встанет в очереди. Гарантируется, что студент с номером $$$x$$$ ещё не занял очередь, а
студент с номером $$$y$$$ уже стоит в ней. </P>
<P>Если $$$t_j = \\textbf{2}$$$, то в строке задается еще 1 число $$$x$$$ $$$(1 \\le x_j \\le
10^9)$$$&nbsp;&mdash; номер студента, который пришел и встал в конец очереди. Гарантируется, что студент
с номером $$$x$$$ ещё не занял очередь.</P>
<P>Если $$$t_j = \\textbf{3}$$$, то в строке задается еще 1 число $$$x$$$ $$$(1 \\le x_j \\le
10^9)$$$&nbsp;&mdash; номер студента, который ушел из очереди. Гарантируется, что студент с номером
$$$x$$$ стоит в очереди.</P>
</DIV>
<P></P>
<P></P>
<DIV class="output-specification">
<DIV class="section-title">Выходные данные</DIV>
<P></P>
<P>В первой строке выведите одно число $$$|a|$$$&nbsp;&mdash; длину очереди после выполнения всех запросов
изменения.</P>
<P>В следующей строке выведите $$$|a|$$$ чисел $$$a_1, a_2, \\cdots , a_{|a|}$$$, где $$$a_i$$$&nbsp;&mdash;
номер студента, который стоит на $$$i$$$-й позиции в очереди.</P>
</DIV>
<P></P>
<P></P>
<DIV class="sample-tests">
<DIV class="section-title">Пример</DIV>
<P></P>
<P></P>
<DIV class="sample-test">
<DIV class="input">
<DIV class="title">Входные данные</DIV>
<PRE class="content" data-content="7 6
1 2 3 4 5 6 7
1 8 3
2 9
3 3
1 3 9
2 10
3 1
">
<DIV class="test-example-line test-example-line-even test-example-line-0">7 6</DIV><DIV class="test-example-line test-example-line-even test-example-line-0">1 2 3 4 5 6 7</DIV><DIV class="test-example-line test-example-line-even test-example-line-0">1 8 3</DIV><DIV class="test-example-line test-example-line-even test-example-line-0">2 9</DIV><DIV class="test-example-line test-example-line-even test-example-line-0">3 3</DIV><DIV class="test-example-line test-example-line-even test-example-line-0">1 3 9</DIV><DIV class="test-example-line test-example-line-even test-example-line-0">2 10</DIV><DIV class="test-example-line test-example-line-even test-example-line-0">3 1</DIV></PRE>
</DIV>
<DIV class="output">
<DIV class="title">Выходные данные</DIV>
<PRE class="content">
9
2 8 4 5 6 7 3 9 10
</PRE>
</DIV>
</DIV>
</DIV>
<P></P>
<P></P>
<DIV class="note">
<DIV class="section-title">Примечание</DIV>
<P></P>
<P>Изначально очередь выглядит следующим образом:</P>
<P><IMG class="tex-graphics" src="e29b6eb80ce5dcdb59a696421149e86cf24fff83.png"></P>
<P>В первую минуту приходит студент с номером 8 и встает перед студентом с номером 3.</P>
<P><IMG class="tex-graphics" src="cb6dba7c484189e88d8e1bc0e15767bbb44c0c69.png"></P>
<P>Потом студент с номером 9 встает в конец очереди.</P>
<P><IMG class="tex-graphics" src="b65f6e3c0bcc7e96380e577e3a79156116f6947e.png"></P>
<P>Студент с номером 3 уходит из очереди.</P>
<P><IMG class="tex-graphics" src="514e52cdf82b640ce29f9178bbd9be3379ab43dd.png"></P>
<P>Потом он возвращается и становится перед студентом с номером 9.</P>
<P><IMG class="tex-graphics" src="6f77902a9e98428961fb5c1bde374d946a82cdd2.png"></P>
<P>После в конец очереди становится студент с номером 10.</P>
<P><IMG class="tex-graphics" src="7b0ffd2ae443ff754e3131a6ddc77af4cb17a043.png"></P>
<P>И студент с номером 1 уходит из очереди.</P>
<P><IMG class="tex-graphics" src="15c12c02bcb2f87450906d26075f1336c6f8bb79.png"></P>
<P>После $$$m$$$ событий очередь имеет следующий вид:</P>
<P><IMG class="tex-graphics" src="ef8c0f8c7ba7108bef3d50979ae09eb267158ee6.png"></P>
</DIV>
</DIV>
<P></P>
<P> </P>
`;
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 <div ref={containerRef} dangerouslySetInnerHTML={{ __html: htmlContent }} />;
}

View File

@@ -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<int>, а также map<int, list<int>::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 (
<div className="flex flex-col w-full h-full bg-red-3001 overflow-y-scroll medium-scrollbar pl-[20px] pr-[12px] gap-[20px]">
@@ -24,14 +52,11 @@ const Statement: React.FC = () => {
</div>
<div>
Три друга хотят встретиться друг с другом. Изначально первый друг находится в позиции 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.
Друзья интересуются, какой минимальной суммарной попарной дистанции они смогут достичь, если они будут двигаться оптимально. Каждый из друзей сдвинется не более одного раза. Таким образом, более формально, они хотят знать минимальную суммарную попарную дистанцию, которой они могут достичь спустя одну минуту.
{/* <FullLatexRenderer content={data.legend}/> */}
</div>
</div>
);
};
export default Statement;
export default Statement;