| BSUIR Open XIII: Школьный финал |
|---|
| Закончено |
Как язык Rust гарантирует безопасную работу с памятью? Для этого вводятся такие концепции, как владение, заимствование и время жизни. Вадим, к сожалению, не смог разобраться, как установить компилятор Rust, поэтому решил потренироваться на упрощенной версии языка.
В языке, который использует Вадим, существует четыре операции:
Вадим предоставил вам последовательность операций, которая представляет некоторую программу, реализованную на этом языке. Вам нужно проверить, что программа безопасно работает с памятью; для этого после каждой операции в программе должны выполняться следующие правила:
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
В первой строке каждого набора входных данных содержится единственное целое число $$$n$$$ — количество операций в программе Вадима.
В следующих $$$n$$$ строках заданы операции в одном из следующих форматов:
Гарантируется, что сумма $$$n$$$ по всем наборам входных данных не превышает $$$10^5$$$.
Также предоставляются следующие гарантии:
Для каждого набора входных данных выведите «Yes» (без кавычек), если программа Вадима безопасно работает с памятью, в противном случае выведите «No» (без кавычек).
631 a2 b a3 c a31 a2 b a2 c a31 a2 b a4 a41 a2 b a4 b4 a41 a2 b a4 b3 c a11 a
No Yes No Yes Yes Yes
В первом наборе входных данных после третьей команды нарушается правило №$$$1$$$.
Во втором наборе входных данных после каждой команды на переменной $$$a$$$ существуют только Read-only ссылки.
В третьем наборе входных данных после третьей команды нарушается правило №$$$2$$$.
В пятом наборе входных данных Writable ссылка создается после удаления Read-only ссылки, поэтому правило №$$$1$$$ не нарушается.
| Название |
|---|


