Что делать, если строк в документе больше 99’999?
Сам расчет – это, свернутая таблица по материалам. И понятно, что в итоге мы имеем ну 1000-2000 разных материалов для выполнения работ. Но, эти пару тысяч материалов собираются путем агрегирования данных из нескольких сотен (и более) смет, т.е. нескольких тысяч сметных позиций, а также вложенных в них ресурсов.
Расчет выполняется в документе, поскольку результат должен быть сохранен, для дальнейшей отправки в обработку, тендер и т.д.
Для понимания пользователя, что расчет выполнен верно, требуется реализовать ряд возможностей:
- из формы документа, при нажатии на свернутой позиции материалов, вывести данные: Смета — Позиция / Ресурс – Количество;
- печать утвержденной формы расшифровки к данной материальной ведомости;
- при объединении, перемещении и других операциях со строками все расшифровки должны переходить к новым строкам владельцам и т.д.
Табличная часть и 99’999 строк
Собственно, с самого начала понятно, что сводную таблицу материалов храним в табличной части документа, поскольку она будет отображаться в момент открытия. И лучше для этого использовать штатные механизмы. Но, вот расшифровку сбора данных, с самого начала не было никакого желания хранить в табличной части. Да и на первом же эксперименте, на примере не самой большой материальной ведомости, мы поймали данное ограничение.
В результате был придуман обходной путь:
- регистр сведений, не подчиненный регистратору (сбор выполняется редко, при каждой перезаписи документа нет нужды перезаписывать регистр) с ведущим измерением ДокументСсылка.МатериальнаяВедомость (имя документа не важно);
- на форме при создании на сервере записываем пустое значение во временное хранилище с указанием уникального идентификатора формы:
- таким образом, получили постоянный адрес для хранения данных;
- гарантировали жизнь данного адреса, до момента закрытия формы.
- Маленькая деталь: чтение данных не обязательно делать при открытии, она может быть реализована порциями, согласно отбору, полученному на основании запроса пользователя.
Таким образом, кроме того, чтобы мы обеспечили хранение и чтение данных, мы к тому же, не помещаем их в реквизит формы, в конечном итоге облегчая «вес пакета данных формы» при обмене между клиентом и сервером. Хотя, мы нагружаем сервер, но кто его жалеет, да? Принимая во внимание, что с данным документом работу выполняет крайне ограниченный круг лиц, а для остальных есть отчеты и поэтому посчитали, что сервер нагрузку переживет.
Остается существенный вопрос, зачем мы храним данные расшифровки истории сбора сводной ведомости? Во-первых, периодически, в процессе формирования актов КС-2, нам необходимо выполнять чтение данных о реальной стоимости материалов согласно данной ведомости (она, к слову, подписывается с заказчиком). Наименования материалов могут меняться, строки объединяться, но в КС-2 мы должны показать информацию о сметном названии материала, позиции в данной ведомости и ценой согласованной с заказчиком (или субподрядчиком). Таким образом, регистр расшифровки выполняет не только роль хранения «истории», но и инструмента достаточно точного получения данных.
Реализация в коде
Модуль формы документа
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // АдресХранилища - реквизит формы, тип Строка, длина - 0 ЭтотОбъект.АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ЭтотОбъект.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // запуск фоновой процедуры считывания данных во временное хранилище // может быть выполнен полностью, или частями, или по запросу пользователя КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // для записи данных из хранилища в регистр сведений // АдресХранилища - переменная модуля объекта (см. МодульОбъекта) ТекущийОбъект.АдресХранилища = ЭтотОбъект.АдресХранилища; КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьДанныеИзХранилищаНаСервере(знач АдресХранилища, знач НастройкаОтбора) // пример получения данных из хранилища Если НЕ ЭтоАдресВременногоХранилища(АдресХранилища) Тогда Возврат; КонецЕсли; ТаблицаДанных = ПолучитьИзВременногоХранилища(АдресХранилища); Если НЕ ТипЗнч(ТаблицаДанных) = Тип("ТаблицаЗначений") Тогда // здесь можно разместить процедуру считывания данных согласно настройкам отбора Возврат; КонецЕсли; КопияТаблицы = ТаблицаДанных.Скопировать(НастройкаОтбора); Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(КопияТаблицы); КонецФункцииМодуль объекта документа
// обязательная переменная, для передачи данных между формой и модулем объекта Перем АдресХранилища Экспорт; Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ЗаписатьДанныеВременногоХранилища(Отказ); КонецПроцедуры Процедура ЗаписатьДанныеВременногоХранилища(Отказ) Если НЕ ЭтоАдресВременногоХранилища(АдресХранилища) Тогда Возврат; КонецЕсли; ТаблицаДанных = ПолучитьИзВременногоХранилища(АдресХранилища); Если НЕ ТипЗнч(ТаблицаДанных) = Тип("ТаблицаЗначений") Тогда Возврат; КонецЕсли; // дополнительно можно проверить, что таблица данных получена путем чтения // а не повторного заполнения пользователем Попытка // обратите внимание, у регистра сведений есть Измерение - ДокументСсылка // рекомендуется делать данное измерение ведущим, чтобы при удалении документа записи очищались // при этом сам регистр не подчинен регистратору, иначе при повторной записи данные будут очищаться БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ХранениеДанныхДокумента"); ЭлементБлокировки.УстановитьЗначение("ДокументСсылка", ЭтотОбъект.Ссылка); БлокировкаДанных.Заблокировать(); НаборЗаписей = РегистрыСведений.ХранениеДанныхДокумента.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ДокументСсылка.Установить(ЭтотОбъект.Ссылка); Для Каждого СтрокаЗаписи Из ТаблицаДанных Цикл ЗаписьРегистра = НаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(ЗаписьРегистра, СтрокаЗаписи); ЗаписьРегистра.ДокументСсылка = ЭтотОбъект.Ссылка; КонецЦикла; НаборЗаписей.Записать(Истина); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='При записи доп. сведений произошла ошибка: '") + Символы.ПС + ТекстОшибки. Отказ); КонецПопытки; КонецПроцедуры Процедура ОчиститьРегистрСведенийХранениеДанныхДокумента() НаборЗаписей = РегистрыСведений.ХранениеДанныхДокумента.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ДокументСсылка.Установить(ЭтотОбъект.Ссылка); НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); НаборЗаписей.Записать(Истина); КонецПроцедурыНу вот как то так.
Постскриптум
Мы понимаем, что могли бы использовать что-нибудь «стильное, модное, молодежное», внешнюю базу данных и может быть даже NoSQL. Но, у нас просто было мало времени на подумать и еще меньше времени на реализовать. Как всегда результат нужен был «здесь и вчера». Решение было создано очень быстро, запущено в работу и проходит анализ на предмет скрытых просчетов. Более того, не у всех заказчиков возможно использование сторонних БД, поэтому данный вопрос будет скорее всего повторно обсуждаться гораздо позже.
Повторюсь, решение возможно не уникальное и не лишенное недостатков. Поэтому прошу направить на путь истинный, если имеются дельные предложения.
Почему не работает правило grid-row 1/-1?
Не работает правило grid-row 1/-1, если у grid-контейнера отсутствует строка, явно указывающая на количество строк (grid-template-rows: auto). Хочу чтобы получилось вот так(код), при добавлении новых элементов, левая колонка тянулась на всю высоту grid-контейнера.
- Вопрос задан более двух лет назад
- 103 просмотра
2 комментария
Простой 2 комментария
Почему не работает правило grid-row 1/-1?
Потому что спецификация и не обещала, что оно будет работать так, как вы хотите для неявной сетки.
Будет только для явной.Хочу чтобы получилось вот так(код), при добавлении новых элементов, левая колонка тянулась на всю высоту grid-контейнера.
Вы можете убрать вертикальный gap, заменив его на margin. И задать красному элементу span 999 или 1/999. Вместо 999 укажите предполагаемое максимальное количество элементов.
Открой магазин суши за 4 недели с чистой прибылью от 300 000 ₽ в месяц
Откройте магазин суши и пиццы по франшизе Суши Love и получайте чистую прибыль от
при вложениях от

от 99 000 ₽
2.5% роялти
4 млн.р. в год
5–8 месяцев
срок окупаемости вложений
Получить бизнес-план —>
Стань частью успешного бизнеса
Отличные показатели по всей стране от поселков до мегаполисовБлаговещенск
население 200+ тыс. человек
– Елена Грицаенко
Окупаемость: 5 мес.
Количество магазинов: 3
Формат : стрит ритейл с доставкой
Вложено: 1,2 млн. в каждую из точек
Ежемесячная прибыль: от 300 тыс. руб.
Заработок: более 70 млн. за 8 лет.
Просмотреть видео отзыв —>
Москва
– население 2 млн. человек
— Кемран Тагиров Ежемесячная прибыль – 450 000 ₽
Окупаемость: 6-7 мес.
Количество магазинов: 2
Формат : стрит ритейл с доставкой
Вложено:1 млн. — первая точка; 2,8 млн. вторая точка
Ежемесячная прибыль: от 350 тыс. руб.
Заработок: более 20 млн за 3 года.
Посмотреть видео историю
Гусев
— население 30 тыс. человек
— Рамис Зайнутдинов Ежемесячная прибыль – 450 000 ₽
Окупаемость: 7 мес.
Количество магазинов: 1
Формат : кафе с доставкой
Вложено:1, 5 млн.
Ежемесячная прибыль: от 350 тыс. руб.
Заработок: более 10 млн за 7 лет.
Просмотреть видео отзыв —>
Краснодар
– население 1 млн.+ человек
— Ирина Хрянина Ежемесячная прибыль – 450 000 ₽
Окупаемость: 6-7 мес.
Количество магазинов: 1
Формат : кафе с доставкой
Вложено:1 млн.
Ежемесячная прибыль: от 350 тыс. руб.
Заработок: более 20 млн за 5 лет.
Просмотреть видео отзыв —>
Больше, чем бренд: с нами Вы получаете
Пошаговое руководство
Простое, понятное и подробное руководство по открытию магазина. Вам не придётся глубоко изучать финансы или право, чтобы открыть свой первый бизнес и не ошибиться в обязательных процедурах.
Обучение управлению бизнесом
С «Суши Love» руководить бизнесом легко, даже если у вас нет опыта управления. Научим вас подбирать персонал, регулировать работу кафе и доставки, мотивировать персонал, работать с клиентами, развивать бизнес. Формат обучения вы выбираете сами: удаленный или очный.
Подбор помещения
Подберём выгодное расположение для вашей будущей точки продаж. Учитываем оптимальную площадь, технические требования и трафик гостей. В результате вы получите максимальный поток посетителей при оптимальных затратах.
3D проект вашего магазина
Создадим индивидуальный 3D-проект вашего магазина. Учтём площади, геометрию и особенности помещения. Покажем, как расположить кухню, стойку и мебель для гостей.
Маркетинговую поддержку
Уникальные материалы для вашего магазина уже готовы: меню, рекламные макеты, печатные материалы, баннеры для соцсетей, акции и календарь событий. Вам нужно только следовать инструкциям и календарю, чтобы создать стабильно растущий поток посетителей.
Интернет-магазин
Ваш сайт уже готов и ждет запуска в вашем городе. Не нужно отдельно платить за дизайн, разработку, корректировать меню и т.д. Сайт автоматически определит геопозицию клиента и запустит версию для вашего города. Просто принимайте и выполняйте заказы, остальное мы берём на себя.
Мобильное приложение
У нашей сети обширная ЦА. Для всех поколений мы разработали современное решение, через которое они смогут с удобством делать заказы без лишних звонков и посещений сайтов. Следствие этого — существенная часть заказов поступает через приложение.
Система лояльности для гостей
Используем мощный инструмент для удержания и возврата клиентов. Вам не придётся самостоятельно рассчитывать условия программы лояльности. Вы получите рабочую систему, которая привлекательна для ваших покупателей и выгодна для вашего бизнеса.
Готовые группы в соцсетях
Зарегистрируем, настроим и подготовим группы во всех популярных соцсетях. Разработаем план выхода постов и поможем правильно настроить общение с пользователями.
Специальные комиссии у агрегаторов доставки
Договорились о выгодных условиях сотрудничества, вам остается только подключиться и получать доход.
Бесплатное открытие юридического лица
Оформим все документы за вас, подадим в налоговую. Вам не придётся разбираться с тонкостями открытия юрлица или переплачивать сторонней фирме за эту процедуру.
Бухгалтерское и юридическое сопровождение
Ответим на любые вопросы. Расскажем как действовать в спорных случаях с учетом правовых норм и законодательства.
Система контроля
Наши инспекторы и тайные покупатели регулярно проверяют продукцию и работу вашего персонала, чтобы гарантировать высшие стандарты качества. Вы получите чек-лист контроля, для осуществления проверок на своей точке.
Вкусное меню и проверенные поставщики
Мы помогаем вам готовить блюда, которые приносят высокую маржу и нравятся вашим клиентам. Средний фуд-кост по нашей сети — 28%.
Поможем с открытием
Наша команда приедет перед открытием точки и поможет открыть кафе без стресса и с максимальной выручкой.
Поддержка после открытия
С первого дня сотрудничества за каждым франчайзи закрепляется персональный менеджер поддержки. С ним можно связаться по телефону, электронной почте или через мессенджер и получить помощь в любой непонятной ситуации.
Получить индивидуальное предложение
Выбери удобный для тебя пакет франшизы
Паушальный взнос
В городах с населением
до 100 000 человекПолучить смету

Легкий старт
Паушальный взносВ городах с населением
до 500 000 человекПолучить смету

Паушальный взнос
В городах с населением
от 500 000 человек + Москва и МОПолучить смету

Ребрендинг
Паушальный взносИзменение и адаптация вашего
суши-бара под бренд Суши LoveПолучить смету

Малый город
Паушальный взносВ городах с населением
до 100 000 человек
Легкий старт
Паушальный взносВ городах с населением
до 500 000 человек
Паушальный взнос
В городах с населением
от 500 000 человек + Москва и МО
Ребрендинг
Паушальный взносИзменение и адаптация вашего
суши-бара под бренд Суши Love
Форматы торговых точек
Магазин
Помещение с отдельным входом. Внутри располагаются места для ожидания заказов или приема пищи гостями за барной стойкой или столиками.
Площадь: 25-50 кв.мЗатраты на открытие: от 999 тыс. руб.
Прибыль: от 350 тыс. руб. в мес.
Окупаемость: от 5 месяцев
Преимущества: низкий порог входа, быстрая окупаемость, быстрый запуск



Кафе
Уютный формат, где гости могут расположиться на мягких диванах, провести время в общении, комфортно перекусить, пообедать или поужинать компанией.
Площадь: от 50 кв.мЗатраты на открытие: 1,5 млн. руб.
Прибыль: от 350 тыс. руб. в мес.
Окупаемость: от 8 месяцев
Преимущества: высокий потенциал для продаж




Фудкорт
Помещение размещается в зоне “Фудкорта” в торгово-развлекательных центрах.
Площадь: 15-17 кв.мЗатраты на открытие: от 999 тыс. руб.
Прибыль: от 300 тыс. руб. в мес.
Окупаемость: от 6 месяцев
Преимущества: высокая проходимость, быстрый запуск, гарантированный поток посетителей

Доставка
Помещение предназначенное для работы с курьерами доставки, с хорошими подъездными путями, без необходимости оборудовать гостевой зал.
Площадь: 20 кв.м.Затраты на открытие: от 600 тыс. руб.
Прибыль: от 300 тыс. руб. в мес.
Окупаемость: от 3 месяцев
Преимущества: простой и быстрый старт
Предоставляем разработанный 3D-проект вашего магазина. Вы получаете изображение готовой точки. Покажем, как расположить кухню, стойку и мебель для гостей
Рассчитайте вашу будущую прибыль
*Результат может отличаться в каждом индивидуальном (отдельном) случае
Роялти от выручки
Среднее количество клиентов по сети
* cреднее количество клиентов одного магазина Суши Love = 1200-1500 чел./в мес.
Расчет прибыли
Первоначальные
вложения
Ежемесячные
расходы
Клиентопоток
(гостей в месяц)
Средний чек
Ежемесячная
выручка
Ежемесячная
прибыль
Рентабельность
Окупаемость(мес.)Сила бренда работает на вас!
Вы получаете все маркетинговые материалы, которые нужны для быстрого запуска и работы.
Яркая упаковка и узнаваемый брендинг





Аппетитные фотографии суши и пиццы



Огненные посты в соцсетях и группы, которые привлекают покупателей





Фирменная одежда для сотрудников



Более 100 магазинов в 50+ городах

Не нашел свой город? Значит он пока свободен, занимай свободную нишу!
Скидка
на паушальный взнос для малых городов
Истории успеха наших партнёров

Просмотреть видео отзыв
Артем и Елена Грицаенко, 31 год и 27 лет,
г. Благовещенск. За 1 год открыли 3 магазина
Окупаемость – 7 месяцев
Если вы никогда не занимались бизнесом, франшиза — это большая помощь и опора. В любое время можно обратиться к опытным людям

Просмотреть видео отзыв
Оксана Пивоварова, 34 года, г. Магадан Ежемесячная прибыль – 450 000 ₽
Окупаемость – 4 месяца
Для меня это первый опыт в бизнесе. Я сразу определилась, что буду покупать франшизу, так как это готовая модель бизнеса. Не надо разрабатывать свой проект, вкладываться в рекламу. Это существенно экономит время и деньги.

Просмотреть видео отзыв
Дмитрий Тихоненко, 31 год,
Калининградская область Ежемесячная прибыль – 450 000 ₽
Окупаемость – 7 месяцев
Каждый магазин Суши Love — это маленький завод. А все виды деятельности, связанные с производством чего-либо, довольно маржинальны. Это позволяет получить небольшой срок окупаемости — у меня получилось в районе 7 месяцев.

Просмотреть видео отзыв
Максим Вишняков, 31 год, Краснодарский край Ежемесячная прибыль – 450 000 ₽
Окупаемость – 6 месяцев
Франшиза Суши Love предоставляет обширный пакет документов, который существенно облегчает запуск бизнеса.
наставники

Наша команда поможет по любым вопросам 24/7

Дмитрий Кременов Основатель сети Суши Love
“ Проведу исследование выбранной
локации и помогу определить лучшее
место для открытия магазина „
Татьяна Панасевич Директор по поставкам
“ Помогаю найти поставщиков
в вашем регионе и выбрать продукты
отличного качества „
Трошина Лидия Директор по маркетингу
“ Отвечаю за привлечение гостей.
Провожу рекламные компании бренда и анализирую их.
Добиваюсь максимальной эффективности каждого вложенного в рекламу рубля „
Александр Литвяков Директор по информационным технологиям
“ Настрою для вас персональный
интернет-магазин и помогу сделать
его эффективным инструментом
для получения выручки „
Анна Михалко Менеджер поддержки
“ Обеспечиваю нашим партнерам оперативную поддержку.
Всегда на связи, чтобы
помочь в решении ваших задач „
Майя Антоненко Smm специалист
“ Создаю и продвигаю контент,
делая наш бренд
популярным в социальных сетях „
Никита Ивашкин Ведущий дизайнер
“ Разрабатываю продающие
макеты для рекламных акций
в вашем магазине „
Евгений Татаренков Руководитель департамента франчайзинга
“ Гарантирую лучшие условия
для приобретения франшизы
в сфере японской кухни
формата take away „
Екатерина Панасевич Операционный директор
“ Стану для вас экспертом
в сфере финансов:
помогу настроить эквайринг,
распределить доходы и расходы,
рассчитать прибыль „
Александр Новиков Исполнительный директор
“ Отвечу на любой вопрос
по правилам взаимодействия
с франчайзером „Наши достижения
ТОП 10 БИБОСС
Рейтинг успешных франшиз
ТОП 3 БИБОСС
Рейтинг франшиз общественного питания
ТОП 1 БИБОСС
Рейтинг франшиз в категории «Суши» премия самая открытая франшиза
ТОП 1 БИБОСС
Рейтинг франшиз в категории «Суши» премия самая открытая франшиза
ТОП 3 БИБОСС
Рейтинг франшиз общественного питания
ТОП 10 БИБОСС
Рейтинг успешных франшиз
Часто задаваемые вопросы
Какая сумма вложений мне понадобится, чтобы открыть магазин?
Инвестиции рассчитываются индивидуально. Их сумма составит от 1,2 до 2,5 млн. руб.
1.1. Почему такой большой разбег по стоимости?
Посмотрите, из чего складываются ваши первоначальные инвестиции:
- Паушальный взнос: от 99 000 до 199 000 руб. – зависит от стартовых условий (размер города, «покрытие» нашей сетью)
- Оборудование & программное обеспечение: 450 000 руб.
- Аренда помещения: от 20 000 до 150 000 руб. (зависит от рынка недвижимости в вашем городе и размера помещения)
- Ремонт помещения: 300 000 руб. (зависит от размера и состояния помещения)
- Рекламные конструкции: 130 000 руб.
- Инвентарь: 30 000 руб.
- Униформа: 10 000 руб.
- Стартовая реклама: 50 000 руб.
- Хозтовары, канцтовары, упаковка: 30 000 руб.
- Продукты: 50 000 руб.
- Командировочные расходы: от 30 000 руб. (на время, пока вы изучаете бизнес)
- Программа лояльности: 100 $
Как видите, здесь есть пункты с фиксированной стоимостью, а есть и такие, где сумма зависит от рыночных факторов и вашего региона. Точную сумму инвестиций мы рассчитаем вместе с вами, когда будем предметно обсуждать сотрудничество.
1.2. Можно как-то уменьшить сумму начальных инвестиций?
Радикально уменьшить её не получится. Все расходы, которые заложены в первоначальный этап, важны для успешного запуска вашего магазина. Но с некоторыми пунктами мы вам сможем помочь, предоставив своих проверенных подрядчиков для ремонта в помещении, изготовления рекламных конструкций и вывески. В чём выгода? Наши подрядчики «обкатаны» на многих магазинах «Суши Love». Они точно знают, что и как делать, какой оттенок краски выбрать и где монтировать вывеску. По нашему опыту, такая слаженность позволяет существенно выиграть время с момента заключения договора до фактического открытия. К тому же, нашим партнёрам подрядчики предоставляют хорошие скидки. У нас сложились хорошие отношения с интегратором программного обеспечения: вы сможете получить от него рассрочку, «разложив» покупку ПО на несколько месяцев.
1.3. Смогу я заранее хотя бы примерно узнать сколько денег потребуется мне для открытия «Суши Love» в моём городе?
Напишите нам через форму обратной связи на этой странице, и мы пришлём вам финансовый калькулятор.
Как мне подобрать помещение под магазин?
Мы проанализируем действующие предложения по аренде в вашем городе или районе и поможем выбрать помещение с лучшей проходимостью и оптимальными условиями аренды.
А что, если у меня возникнут проблемы после открытия? Вы поможете разобраться?
Конечно! Когда мы с вами заключаем договор, мы становимся партнёрами. А партнёры помогают друг другу справиться с трудностями.
Всегда на связи с вами будут сотрудники «Суши Love», ответственные за все аспекты работы магазина: кухню, финансы, ИТ, рекламу и т.д.
Задавайте вопросы 24/7 – сотрудник «Суши Love», компетентный по этому вопросу, ответит вам быстро и по делу.
Я ничего не знаю о «кухне» франшизы. Как мне подготовиться к открытию магазина?
До открытия вашей точки «Суши Love» мы пригласим вас на экспресс-обучение в один из топовых магазинов сети.
Вы проведёте у своих будущих коллег три насыщенных дня. Каждый день вы будете «примерять» на себя новую роль и погрузитесь в работу магазина японской кухни. Вам предстоят:
По нашему опыту, трёхдневного интенсивного обучения под руководством опытных коллег достаточно даже новичкам. За это время вы получите знания и навыки, необходимые для успешного открытия собственного магазина.
Как обустроить помещение магазина? Или мне самому нужно будет искать и нанимать дизайнера?
В команде «Суши Love» есть собственный дизайнер, который работает над всеми дизайнами магазинов сети. Он знает, какие цвета использовать и как организовать расстановку мебели, чтобы стимулировать продажи. Он изготовит план-макет вашего будущего магазина.
У меня есть бригада строителей, которой я доверяю, и знакомые рекламщики. Могу ли я нанять их для подготовки магазина к открытию или я обязан работать со специалистами, которых порекомендует «Суши Love»?
Мы не настаиваем на «своих» специалистах: всё зависит от вас. Если вы хотите максимально погрузиться в процесс подготовки, искать подрядчиков для ремонта помещения, изготовления мебели и рекламных конструкций и уверены в своих силах – мы вас только поддержим!
Если же у вас нет времени на все эти процедуры или вы считаете, что в вашем городе нет достаточно хороших специалистов – не переживайте, мы порекомендуем вам хороших, проверенных подрядчиков, с которыми мы уже работали. Курировать все направления будет представитель «Суши Love», так что вам не придется вникать в подробности. Только примите результат работ – и можно открываться!
О самом важном: как найти поставщиков, которые не подведут?
Мы предоставим вам перечень поставщиков, которым доверяем сами. Они не подводят ни со сроками поставки продуктов, ни с качеством.
Вы обещаете предоставить какой-то «пакет документов». А что в него входит?
- должностные инструкции для всех сотрудников
- руководство по оперативному управлению бизнесом
- видеоинструкции по всем технологическим процессам, происходящим на кухне
- инструкции для CRM
- образцы договоров с подрядчиками и поставщиками
- технологические карты на все блюда
- рекомендации по дизайну и рекламе и другие нужные рабочие документы.
А что насчёт рекламы? Мне нужно будет самому придумывать, как продвигать свой магазин, или вы поможете?
Мы «обкатали» все маркетинговые инструменты на собственных магазинах и составили удачную стратегию маркетинга и рекламы. Она поможет вам привлечь максимальное количество клиентов, сохранить их лояльность и вложить в это минимум денежных средств.
Конечно мы передадим вам все необходимые данные и инструменты:
Какой вид налогообложения выбрать?
Мы рекомендуем формулу УСН или патент — вид фиксированной ставки оплаты налогов. Выбрав УСН или патент, наши партнеры знают, когда и сколько нужно платить налогов вне зависимости от оборотов в месяц или год. Специальный бухгалтер не требуется, что сокращает ФОТ. В общем, экономия и времени, и ваших денег налицо.
Как расположить 999 чтобы получилось максимальное число
Саша и Катя учатся в начальной школе. Для изучения арифметики при этом используются карточки, на которых написаны цифры (на каждой карточке написана ровно одна цифра). Однажды они пришли на урок математики, и Саша, используя все свои карточки, показал число A , а Катя показала число B . Учитель тогда захотел дать им такую задачу, чтобы ответ на нее смогли показать и Саша, и Катя, каждый используя только свои карточки. При этом учитель хочет, чтобы искомое число было максимально возможным.
Входные данные
Во входном файле записано два целых неотрицательных числа A и B (каждое число в одной строке). Длина каждого из чисел не превосходит 100 000 цифр.
Выходные данные
Выведите одно число — максимальное целое число, которое можно составить используя как цифры первого числа, так и цифры второго числа. Если же ни одного такого числа составить нельзя, выведите -1.
Примеры тестов
Входные данные
280138
798081
Выходные данные
8810
Входные данные
123
456
Выходные данные
ПримечаниеOnline-группа тестов оценивается в 60 баллов, в этой группе числа A и B содержат не более 1000 цифр каждое. При этом решения, правильно работающие для случая, когда A и B содержат не более 6 цифр, будут оценены не менее, чем в 20 баллов. Решения, правильно работающие для случая, когда A и B содержат не более 9 цифр, будут оценены не менее, чем в 40 баллов.
Offline-группа тестов оценивается в 40 баллов.
Источники: [ Личные олимпиады, Московская олимпиада школьников, 6-9 классы, 2012, Задача D ]
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesВитя изучает новый язык программирования Питон. Пока он только успел изучить арифметические операции и условную инструкцию «if», но он уже полюбил этот язык за красоту и лаконичность синтаксиса.
Отличительной особенностью языка Питон является то, что блоки после инструкций «if» и «else» (а также в циклах «for» и «while», но Витя еще не успел изучить циклы) выделяются не ключевыми словами (например, в языке Паскаль используются слова «begin» и «end») и не скобками (например, в языке C используются фигурные скобки), а величиной отступа от начала строки, то есть количеством пробелов, которые идут в начале строки. Например, в такой программе:
if a < 0:
print(«Число a — отрицательное»)
a = -a
print(«Теперь a — положительное»)Более формально правила расстановки пробелов в программе такие. Первая строка программы, а также все инструкции в программе, если они не находятся внутри блоков условных инструкций, не содержат отступа, то есть пробелов в начале строки. Если в программе встречается условная инструкция «if», то блок после этой инструкции пишется с отступом. Величина отступа может быть произвольной (1, 2, 3 и более пробелов), но для всех инструкций внутри блока отступ должен быть одинаковым. Если после инструкции «if» идет инструкция «else», то она должна иметь такой же отступ, что и соответствующая ей инструкция «if», после инструкции «else» идет блок из одной и более инструкций с дополнительным отступом. При этом отступ у блока «if» и блока соответствующего ему «else» может быть различным (смотрите примеры верных программ ниже), но внутри одного блока отступ должен быть одинаковым.
Каждой инструкции «if» может соответствовать не более одной инструкции «else». Не допускаются инструкции «else», перед которыми нет инструкции «if». После каждой инструкции «if» и «else» обязательно следует хотя бы одна инструкция с отступом.
Также допускаются вложенные условные инструкции, у блоков вложенных условных инструкций отступ должен быть большим, чем у объемлющей инструкции, но при этом может быть произвольным.
if x > 0: print("x > 0") print(x) else: print("x < 0") print(-x) print("Bye")if a > b: if a > c: print(a) else: print(c) else: if b > c: print(b) else: print(c)
if x > 0: print(x) print("x > 0")if x > 0: else: print(x)
Витя хочет написать компилятор языка Питон, и для начала он решил реализовать анализатор корректности расстановки отступов в условных инструкциях. Помогите ему в решении этой задачи.
Входные данные
Во входном файле записан некоторый текст, содержащий не более 100 строк. Длина каждой строки не превосходит 100 символов. Каждая строка состоит из символов, ASCII-коды которых не менее 32 и не более 126.
Строка считается инструкцией «if», если первыми непробельными символами строки является слово «if», после которого идет пробел, а затем — любое число любых символов. Строка считается инструкцией «else», если она содержит только одно слово «else:» (с двоеточием после него) и, возможно, отступ в начале строки.
Любая строка содержит хотя бы один непробельный символ. Последняя строка программы обязательно содержит ровно одно слово «exit()» без пробелов, завершающееся символом конца строки.
Выходные данные
Если отступы в этой программе расставлены правильно, то программа должна вывести одно число 0. Если отступы расставлены неправильно, то нужно вывести минимальный номер строки, в которой нарушаются правила расстановки отступов.
Примеры тестов
Входные данныеa, b, c = map(int, input().split()) if a > b: if a > c: print(a) else: print(c) else: if b > c: print(b) else: print(c) exit()
Выходные данные
Входные данныеx = int(input()) if x < 0: print("Negative") x = -x else: print("Positive") exit()Выходные данные
ПримечаниеOnline-группа тестов оценивается в 50 баллов. Тесты этой группы не содержат инструкции «else».
Offline-группа тестов оценивается в 50 баллов.
Программа, которая выдает правильный ответ только на тех примерах, в которых ответ 0, будет оцениваться в 0 баллов (то есть для получения ненулевого числа баллов за задачу программа должна выдавать правильный ответ хотя бы на одном тесте, помимо теста из условия, в котором ответ не 0).
Источники: [ Личные олимпиады, Московская олимпиада школьников, 6-9 классы, 2012, Задача E ]
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesВ одной из компьютерных игр-квестов есть следующее задание. На карте игрового мира размещены N персонажей, с каждым из которых может встретиться игрок. От общения с i -м персонажем карма игрока меняется на величину ai , которая может быть как положительной, так отрицательной или даже нулем.
Изначально карма игрока равна нулю. Для того чтобы пройти на следующий уровень, нужно чтобы карма была в точности равна значению K , при этом карма также может принимать как положительные, так и отрицательные значения.
Комнаты, в которых находятся персонажи, соединены односторонними магическими порталами, поэтому игроку придется встречать персонажей в определенной последовательности: после персонажа номер i он попадает к персонажу номер i + 1 , затем к персонажу номер i + 2 , и т.д. В комнате последнего персонажа с номером N портала к другому персонажу нет.
Для перемещения между персонажами можно использовать еще и заклинания телепортации, но к сожалению у героя осталось всего лишь два свитка с заклинаниями. Поэтому один из этих свитков придется использовать для того, чтобы телепортироваться к любому из персонажей, а второй свиток — чтобы покинуть игровой мир, после того, как карма героя станет равна K .
Помогите игроку определить, в какую комнату надо телепортироваться в начале и из какой комнаты нужно покинуть игровой мир, чтобы достичь кармы K или сообщите, что это невозможно.
Входные данные
В первой строке входных данных записаны два числа: количество персонажей N и необходимый уровень кармы K ( |K| ≤ 10 9 , K ≠ 0 ). Во второй строке через пробел записаны N целых чисел a1 , a2 , . aN — величины, на которые меняется карма героя после общения с персонажами с номерами 1, 2, . N соответственно.
Выходные данные
Выведите номер комнаты, в которую надо войти игроку и номер комнаты, из которой надо выйти, чтобы набрать карму K . Если возможных вариантов несколько, то необходимо вывести самый короткий путь, а если и таких несколько, то путь, начинающийся в комнате с как можно большим номером. Если достичь кармы K последовательно общаясь с персонажами невозможно, то выведите одно число - 1 .
Примеры тестов
Входные данные
5 3
-2 2 -1 2 4
Выходные данные
Входные данные
7 1
1 -1 1 -1 1 -1 2
Выходные данные
Входные данные
4 3
2 2 2 2
Выходные данные
ПримечаниеТесты по этой задачи разбиты на группы. На 1-3 группах тестов проверка проводится во время тура (online), на последней группе — после окончания тура (offline).
В первой группе тестов 1 ≤ N ≤ 100 , |ai| ≤ 100 . Баллы начисляются только при прохождении всех тестов группы, группа оценивается в 20 баллов.
Во второй группе тестов 1 ≤ N ≤ 2000 , |ai| ≤ 1 000 000 . Баллы начисляются только при прохождении всех тестов группы, группа оценивается в 20 баллов.
В третьей группе тестов 1 ≤ N ≤ 200 000 , 0 ≤ ai ≤ 10 9 . Баллы начисляются только при прохождении всех тестов группы, группа оценивается в 20 баллов.
В четвертой группе тестов 1 ≤ N ≤ 200 000 , |ai| ≤ 10 9 . Каждый тест этой группы оценивается отдельно. Общее число баллов за тесты этой группы равно 40.
ограничение по времени на тест
ограничение по памяти на тест
256 megabytesАнтивирусная IT-компания имеет официальную иерархическую структуру управления. В ней есть босс – единственный сотрудник, над которым нет начальника. Каждый из остальных сотрудников подчинён ровно одному сотруднику – своему начальнику. Начальник может иметь нескольких подчинённых и отдавать или передавать приказы любому из них. Приказы могут передаваться от одного сотрудника другому только по цепочке, каждый раз от начальника к его подчинённому. Сотрудник А главнее сотрудника Б в этой иерархии, если А может отдать или передать приказ сотруднику Б непосредственно, или через цепочку подчинённых. Босс главнее любого сотрудника. Оказалось, что все сотрудники объединены ещё в одну организованную подобным образом тайную иерархическую структуру, производящую компьютерные вирусы. В тайной структуре может быть другой босс, а у сотрудников – другие начальники. Будем называть пару сотрудников А и Б устойчивой , если А главнее Б и в основной, и в тайной иерархических структурах. Требуется написать программу, определяющую количество устойчивых пар в компании.
Входные данные
В первой строке задано число N – количество сотрудников компании ( 1 ≤ N ≤ 100 000 ). Во второй строке – N целых чисел ai , где ai = 0 , если в официальной иерархии сотрудник с номером i является боссом, в противном случае ai равно номеру непосредственного начальника сотрудника номер i . В третьей строке – N целых чисел bi , где bi = 0 , если в тайной иерархии сотрудник с номером i является боссом, в противном случае bi равно номеру непосредственного начальника сотрудника номер i . Нумерация сотрудников ведется с единицы в том порядке, в каком они упомянуты во входном файле.
Выходные данные
Выходной файл должен содержать единственное число – количество устойчивых пар.
Примечание
Данная задача содержит три подзадачи. Для оценки каждой подзадачи используется своя группа тестов. Баллы за подзадачу начисляются только в том случае, если все тесты из этой группы пройдены.
Входные данные
3 0 3 1 0 1 1
Выходные данные
Входные данные5 2 0 1 3 4 3 1 0 2 4
Выходные данные
ограничение по времени на тест
ограничение по памяти на тест
256 megabytesВсе элементы магнитной мозаики фирмы «ABBYY» имеют прямоугольную форму. Два элемента можно соединить только в том случае, если у них совпадает хотя бы один из размеров: длина, ширина, или и то, и другое. Магнитные элементы поворачивать и переворачивать нельзя. Пару элементов мозаики, которые нельзя соединить, назовем негармоничной . Например, пара 1 × 2 и 2 × 3 является негармоничной, а пары 2 × 3 и 1 × 3 или 2 × 3 и 2 × 3 являются гармоничными. Дизайнеры «ABBYY» выложили все элементы мозаики в ряд, не соединяя их между собой. Назовем набором несколько подряд лежащих элементов мозаики в этом ряду. Они выбрали несколько наборов элементов, которые хотят оставить для создания инсталляции. Для каждого такого набора им нужно выяснить, есть ли в нем негармоничная пара элементов. Требуется написать программу, которая для различных наборов подряд лежащих элементов мозаики определит номера элементов, образующих негармоничную пару, или сообщит, что такой пары нет.
Входные данные
В первой строке входного файла записано одно число N – количество элементов, из которых состоит мозаика ( 2 ≤ N ≤ 100 000 ). В следующих N строках записаны по два целых числа Ai и Bi , задающих длину и ширину i -го элемента мозаики соответственно ( 1 ≤ Ai, Bi ≤ 10 9 , 1 ≤ i ≤ N ). В (N + 2) -й строке записано одно целое число K – количество наборов, в каждом из которых нужно определить номера двух негармоничных элементов ( 1 ≤ K ≤ 100 000 ). В следующих K строках записаны пары целых чисел N1 и N2 – номера первого и последнего элементов набора соответственно, в котором необходимо найти два негармоничных элемента мозаики (1 ≤ \(N_1\) K строк, каждая из которых содержит два разделённых пробелом числа – номера элементов мозаики, образующих негармоничную пару в соответствующем наборе. Если решений несколько, можно вывести любое из них. Если в наборе негармоничная пара отсутствует, требуется вывести в соответствующей строке 0 0.
Примечание
Данная задача содержит четыре подзадачи. Для оценки каждой подзадачи используется своя группа тестов. Баллы за подзадачу начисляются только в том случае, если все тесты из этой группы успешно пройдены.
Входные данные
4 2 2 1 2 1 3 2 3 2 2 3 2 4
Выходные данные
0 0 4 2
ограничение по времени на тест
ограничение по памяти на тест
256 megabytesУчастники олимпиады пришли в казанский театр на спектакль, где играют N неизвестных для них актеров. В фойе театра висят портреты всех актеров труппы, которая в полном составе задействована в спектакле. Портреты не подписаны. Зрителям раздали программки, в которых для каждого действия спектакля приводится список фамилий участвующих в нем актеров, но не указаны их роли. Театрал Виталий решил узнать, как выглядит каждый из актеров, упомянутых в программке. Для этого в антракте после каждого действия он выходил в фойе и сопоставлял портреты с увиденными актерами. Требуется написать программу, которая по заданному числу актеров N и списку фамилий актеров, участвующих в каждом из M действий, определяет номер действия, после которого впервые становится возможным установить соответствие между фамилией актера из программки и его портретом.
Входные данные
Первая строка входного файла содержит два натуральных числа N – число актеров и M – количество действий в спектакле ( 1 < N ≤ 100000, 1 ≤ M ≤ 100 000 ). В каждой из следующих M строк сначала записано количество актеров Ki , участвующих в i –ом действии ( 1 ≤ Ki ≤ N, K1 + K2 + . + KM ≤ 100 000 ), а затем Ki различных натуральных чисел, не превосходящих N , обозначающих фамилии этих актеров. Соседние числа в каждой строке разделены пробелом.
Выходные данные
Выходной файл должен содержать одну строку, состоящую из N записанных через пробел чисел. i -е число этой строки – это номер действия, после которого впервые становится возможным установить соответствие между i –м актером и его портретом. Если к концу спектакля установить соответствие между каким-либо актером и его портретом так и не удалось, то соответствующее число в строке должно быть равно нулю.
Примечание
В первом примере три актера участвуют в спектакле с тремя действиями. В первом действии участвуют два актера с номерами 1 и 2. Так как актеров всего трое, то после первого акта становится понятно, какой портрет соответствует актеру с номером 3, поэтому третье число строки выходного файла равно 1. Во втором действии участвуют два актера с номерами 3 и 2. Поскольку только второй актер участвовал и в первом, и во втором действиях, то его портрет можно определить после второго действия. А так как портретов всего три, то после второго действия можно установить, что последний портрет соответствует актеру номер 1. Третье действие на ответ не влияет.
Данная задача содержит три подзадачи. Для оценки каждой подзадачи используется своя группа тестов. Баллы за подзадачу начисляются только в том случае, если все тесты из этой группы пройдены.
Входные данные
3 3 2 1 2 2 3 2 2 1 2
Выходные данные
2 2 1
Входные данные
5 3 3 1 2 3 3 2 1 3 2 1 3
Выходные данные
0 3 0 0 0
Входные данные
4 3 1 1 1 3 1 2
Выходные данные
1 3 2 3
ограничение по времени на тест
ограничение по памяти на тест
256 megabytesГотовясь к бою, хан Гирей пронумеровал всех воинов своего войска натуральными числами от 1 до N . Поскольку воины умеют сражаться, но не умеют считать, при любом построении в шеренгу они выстраиваются в произвольном порядке. Одного или несколько воинов, стоящих в шеренге, будем называть отрядом . Отряд назовем правильным , если номера этих воинов в том порядке, в котором они стоят в шеренге, образуют упорядоченную по возрастанию последовательность чисел. Среди всех правильных отрядов хан Гирей выбирает ударный отряд – самый большой по количеству воинов. Так, в шеренге 1 3 2 4 из четырех воинов ударными являются отряды 1 3 4 и 1 2 4, а отряд 1 4 – один из правильных, но не ударный. Некоторые воины являются личными телохранителями хана Гирея. Требуется составить программу, определяющую количество таких шеренг, в которых телохранители хана образуют ударный отряд.
Входные данные
В первой строке входного файла задано натуральное число N – общее количество воинов ( 1 ≤ N ≤ 15 ). Во второй строке задано натуральное число K – количество телохранителей хана ( 1 ≤ K ≤ N ). В третьей строке через пробел указаны K различных натуральных чисел, не превосходящих N , – номера телохранителей хана в порядке возрастания.
Выходные данные
Выходной файл должен содержать единственное число – количество различных расстановок всех воинов в шеренгу так, чтобы все телохранители хана были ударным отрядом в каждой из таких расстановок.
Примечание
В первом примере войско состоит из пяти воинов. Ударный отряд должен состоять из трех воинов с номерами 1, 3 и 4. Этому условию удовлетворяют следующие 11 шеренг: (1, 3, 2, 5, 4), (1, 3, 5, 2, 4), (1, 3, 5, 4, 2), (1, 5, 3, 2, 4), (1, 5, 3, 4, 2), (2, 1, 3, 5, 4), (2, 1, 5, 3, 4), (2, 5, 1, 3, 4), (5, 1, 3, 2, 4), (5, 1, 3, 4, 2), (5, 2, 1, 3, 4).
Данная задача содержит семь подзадач. Для оценки каждой подзадачи используется своя группа тестов. Баллы за подзадачу начисляются только в том случае, если все тесты из этой группы успешно пройдены.
Входные данные
5 3 1 3 4
Выходные данные
Входные данные3 3 1 2 3
Выходные данные
Входные данные1 1 1
Выходные данные
Источники: [ Личные олимпиады, Международные олимпиады, 2007, 1 тур, Задача C ]
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesМирко большой фанат различных узоров на полях, в первую очередь странных кругов предположительно инопланетного происхождения. Одной летней ночью он решил создать свой собственный узор на поле своей бабушки. Так как Мирко патриот своей родной Хорватии, то он решил, что узор на поле будет в форме хорватского герба, который, как известно, представляет собой шахматную доску 5 на 5 c 13 красными и 12 белыми квадратами.

Поле бабушки Мирко разделено на \(N\) рядов по \(N\) клеток в каждом. Левый нижний угол поля обозначается координатами \((1, 1)\), правый верхний - координатами \((N, N)\).
Мирко решил выкосить траву только на тех участках, которые соответствуют красным полям на шахматной доске. Он выбрал нечетное число \(M \geq 3\) и так выкосил траву на поле, что каждый квадрат на шахматной доске соответствует квадрату размером \(M \times M\) клеток на поле, и шахматная доска целиком умещается на поле.
На рисунке (см. английскую версию условия) показан пример поля для \(N = 19\) и \(M = 3\). Клетки, на которых трава была выкошена, отмечены серым. Центр узора имеет координаты \((12, 9)\) и отмечен черной точкой
После того, как Мирко пошел спать, его творение привлекло внимание настоящих инопланетян! Они летают высоко вверху над полем в космическом корабле и исследуют узор с помощью прибора. Этот прибор может лишь определить, есть ли в определенной клетке трава или нет.
Пришельцы нашли одну клетку с выкошенной травой и теперь хотят найти центральную клетку узора Мирко. Они не знают размера узора \(M\).
Входные данные
Напишите программу, которая по размеру поля \(N\) (\(1 \leq N \leq 2\,000\,000\,000\)), координатам некоторой клетки с выкошенной травой \((X_0, Y_0)\) и способности взаимодействовать с инопланетным устройством, найдет центральную клетку узора Мирко
На каждом тесте устройство не может быть запущено более 300 раз
Это интерактивная задача. Ваша программа может взаимодействовать с устройством инопланетян, используя стандартный вывод и считывая данные, передаваемые устройством со стандартного ввода
- При запуске программы ей будут введены разделенные пробелом числа \(N\), \(X_0\), \(Y_0\).
- Для того, чтобы узнать есть ли трава в клетке \((X, Y)\) выведите на стандартный поток вывода строку "examine \(X\) \(Y\)". Если координаты \((X, Y)\) не будут находиться внутри поля или вы запустите устройство более 300 раз, то космический корабль потеряет управление и врежется в землю. Вы же в этом случае получите 0 баллов за тест.
- Устройство поместит в ваш стандартный поток ввода строку "true", если трава в указанной клетке выкошена и "false" в противном случае.
- Когда программа обнаружит центральную клетку, она должна вывести строку "solution \(X_c\) \(Y_c\)" на стандартный поток вывода. Выполнение вашей программы в этот момент будет автоматически завершено.
Для корректной работы вашей программы не забывайте вызывать функцию "flush" после каждого вывода данных. Её заменяет endl в С++, print в Python, writeln в Pascal.
Пример диалога
> 20 4 9 < examine 2 9 >false < examine 3 9 >true < examine 6 9 >false < examine 5 9 >true < examine 4 3 >true < examine 2 3 >false < examine 3 3 >true < examine 3 1 >false < examine 3 2 >true < solution 10 9

ограничение по времени на тест
ограничение по памяти на тест
64 megabytesВсем известно, что в 2012 году прошла Летняя Олимпиада в Лондоне, однако не каждый знаком с историей крупнейших спортивных соревнований. Традиция игр зародилась в Древней Греции, но была забыта по завершении античной эпохи и вновь появилась лишь в конце XIX века благодаря французскому общественному деятелю Пьеру де Кубертену.
С 1896 года вновь проводятся летние Олимпийские игры, а с 1924 — зимние, причём оба вида соревнований проходят раз в четыре года. Первое время зимняя и летняя Олимпиады проводились в один и тот же год, но в конце XX века Международный олимпийский комитет принял решение установить между разными видами Игр двухгодичный перерыв. Таким образом, 1992 год был в последний раз отмечен проведением одновременно летних и зимних Олимпийских игр, в 1994 проводились только зимние, в 1996 — летние, и с тех пор они продолжают чередоваться.
Известно также, что в 1916, 1940 и 1944 годах Олимпийские игры были отменены по причине Первой и Второй мировых войн, а в 1906 году проводилась внеочередная Олимпиада.
Требуется написать программу, которая по заданному году определит, проводились ли в этом году Олимпийские игры и были ли они летними или зимними.
Входные данные
На вход программе подаётся одно натуральное число N ( 1800 ≤ N ≤ 2014 ) — номер года.
Выходные данные
Выведите « winter », если в этом году была проведена только зимняя Олимпиада, « summer », если только летняя, « winter summer », если прошли обе олимпиады, и « nothing », если в этот год олимпийских игр не проводилось.
Примеры тестов
Входные данные1896
Выходные данные
summer
Входные данные
1924
Выходные данные
winter summer
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesМальчик Вася очень любит строить башни из кубиков. К сожалению, во время последней игры он увлёкся и потерял все кубики, кроме двух. Однако Вася не стал унывать и придумал новое развлечение. Заметив, что на каждой грани кубиков написано по одной цифре, он научился выкладывать двузначные числа из оставшихся игрушек. Вскоре мальчику стало интересно, сколько идущих подряд чисел, начиная с единицы, он сможет выложить с помощью двух кубиков. Помогите Васе найти ответ — такое максимальное число K , что все числа от 1 до K включительно можно получить, используя два оставшихся кубика.
Поскольку в игре используются оба кубика, числа, меньшие 10, Вася выкладывает с ведущими нулями (так, единицу можно получить, выбрав грань первого кубика с цифрой 0 и второго — с цифрой 1). Помните, что Вася умный мальчик: он знает, что перевернутый кубик с цифрой 6 позволяет получить цифру 9, и наоборот.
Входные данные
На вход подаются две строки, каждая из которых содержит 6 цифр, написанных на гранях соответствующего кубика.
Выходные данные
Выведите максимально возможное число K . В случае, если даже число 1 получить невозможно, требуется вывести 0.
Примеры тестов
Входные данные0 1 2 3 4 50 6 7 8 9 2
Выходные данные
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesДано натуральное число N . Требуется написать программу, которая находит такое минимальное число M , произведение цифр которого равно N .
Входные данные
Вводится целое число N (1 ≤ N ≤ 2·10 6 ) .
Выходные данные
Выведите на экран одно число M ≥ 10 или фразу « No solution ». Число M должно начинаться со значащей цифры (не с нуля).
Примеры тестов
Входные данные
Выходные данные
Входные данные
Выходные данные
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesВ Шахматной Стране всегда пользовались популярностью различные спортивные соревнования: ферзебол, рокировочная борьба, эндшпилевые бега. Но наибольшую популярность в этом году получила спортивная игра «обмен королей».
Суть её заключается в следующем. Двух королей (белого и чёрного) ставят на прямоугольное шахматное поле, некоторые клетки которого отмечены как недостижимые . По правилам игры короли делают ходы по очереди (сначала белый, а затем чёрный), не наступая на недостижимые клетки. Игра считается успешно законченной, если черный и белый короли поменялись местами. В соревновании побеждает та пара королей, которая смогла поменяться местами за минимальное количество ходов.
Напомним, что в шахматах король имеет право переместиться из своей клетки в любую из 8 соседних по вертикали, диагонали или горизонтали, при условии, что она не является соседней для другого короля.
Напишите программу, которая по информации о доске найдет минимальное количество ходов, необходимое для успешного окончания игры.
Входные данные
В первой строке входных данных даны целые числа N и M ( 1 ≤ N , M ≤ 8 ) — размеры доски по вертикали и по горизонтали, соответственно. В следующих N строках даны M символов — состояние доски в начале игры. Символ « . » обозначает пустую клетку, символ « * » — недостижимую клетку, символ « W » — белого короля, « B » — черного короля. Гарантируется, что символы « W » и « B » встречаются на поле ровно по одному разу, и короли не находятся в соседних клетках изначально.
Выходные данные
В выходной файл необходимо вывести минимальное количество ходов, которое потребуется для того, чтобы белый король поменялся местами с чёрным. В случае, если поменять королей местами невозможно, требуется вывести « Impossible » без кавычек.
Примеры тестов
Входные данные4 3*.*W.B. *.*
Выходные данные
Входные данные2 3W....B
Выходные данные
Impossible
Примечание

Последовательность ходов, необходимая для обмена королей в первом тесте, приведена на рисунке:
На аллее перед зданием Министерства Обороны в ряд высажены \(n\) дубов. В связи с грядущим приездом главнокомандующего, было принято решение срубить несколько деревьев для придания аллее более милитаристического вида.
Внутренние распорядки министерства позволяют срубать дуб только в двух случаях:
* Если и ближайший дуб слева, и ближайший дуб справа строго ниже, чем данный дуб.
* Если и ближайший дуб слева, и ближайший дуб справа строго выше, чем данный дуб.
В частности, согласно этому правилу, нельзя срубить крайний левый и крайний правый дуб.
Министр хочет выработать такой план вырубки, чтобы в итоге осталось несколько дубов, высоты которых образуют неубывающую последовательность, то есть чтобы каждый дуб был не ниже, чем все дубы, стоящие слева от него. При этом, как человек любящий флору, министр хочет, чтобы было срублено минимальное возможное количество деревьев.
Помогите сотрудникам министерства составить оптимальный план вырубки аллеи или выяснить, что срубить дубы соответствующим образом невозможно.
Входные данные
Первая строка входного файла содержит целое число \(n\) — количество дубов, растущих на аллее (\(2\le n \le 200\)). Вторая строка содержит \(n\) чисел — высоты дубов, приведенные слева направо. Высоты дубов — положительные целые числа, не превышающие 1000.
Выходные данные
Если оставить последовательность дубов с неубывающими высотами невозможно, выходной файл должен содержать только одно число \(-1\).
В случае, если искомый план существует, в первую строку выходного файла выведите целое число \(m\) — минимальное количество дубов, которые необходимо срубить. В следующие \(m\) строк выведите оптимальный план вырубки деревьев — номера дубов в том порядке, в котором их следует срубать, по одному номеру на строке.
Дубы нумеруются слева направо натуральными числами от \(1\) до \(n\).
Если планов с наименьшим числом срубаемых дубов несколько, выведите любой из них.
Система оценки
В 50 баллов оценивается решение для случая, когда все высоты дубов попарно различны.
Входные данные
5 3 2 4 8 5
Выходные данные
2 2 4
Входные данные
5 4 5 5 5 6
Выходные данные
Входные данные6 1 1 3 3 2 2
Выходные данные
Входные данные6 400 300 310 300 310 500
Выходные данные
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesВ театре работает \(n\) актеров. Известно, что среди них \(a\) – высоких, \(b\) – голубоглазых и \(с\) – блондинов. Для главной роли в новом спектакле режиссеру требуется только один высокий голубоглазый блондин. Чтобы спланировать свое время для беседы с каждым таким артистом из труппы театра, режиссеру необходимо узнать, какое максимальное или какое минимальное количество артистов из работающих в театре подходит для этой роли.
Требуется написать программу, которая по заданным числам \(n\), \(a\), \(b\) и \(с\) определяет минимальное или максимальное количество актеров, с которыми режиссер должен переговорить.
Входные данные
Первая строка входного файла содержит одно число, которое задает, минимальное или максимальное количество актеров необходимо найти в данном тесте. Это число может принимать следующие значения:
- 1, если в данном теcте требуется определить минимальное количество актеров;
- 2, если в данном тесте требуется определить максимальное количество актеров.
Выходные данные
Выходной файл должен содержать одно число – минимальное или максимальное (в зависимости от входных данных) количество актеров, которые могут претендовать на главную роль в новом спектакле.
Система оценивания
Правильные решения для тестов, в которых требуется найти минимальное количество актеров, будут оцениваться из 50 баллов. Правильные решения для тестов, в которых требуется найти максимальное количество актеров, будут оцениваться из 50 баллов. Несмотря на выделение отдельных групп тестов для минимального и максимального количества артистов, на окончательную проверку будут приниматься только решения, правильно работающие для всех тестов из условия задачи.
Входные данные
2 5 3 4 5
Выходные данные
Входные данные1 5 3 4 5
Выходные данные
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesЮный программист решил придумать собственную игру. Игра происходит на поле размером \(N \times N\) клеток, в некоторых клетках которого расположены города (каждый город занимает одну клетку; в каждой клетке может располагаться не более одного города). Всего должно быть чётное количество городов. Изначально про каждую клетку игрового поля известно, расположен ли в ней город или нет. Чтобы начать игру, необходимо разделить игровое поле на два государства так, чтобы в каждом государстве было поровну клеток-городов. Граница между государствами должна проходить по границам клеток таким образом, чтобы из любой клетки каждого государства существовал путь по клеткам этого же государства в любую другую его клетку (из клетки можно перейти в соседнюю, если они имеют общую сторону). Каждая клетка игрового поля должна принадлежать только одному из двух государств, при этом государства не обязаны состоять из одинакового количества клеток. Требуется написать программу, которая с учетом сказанного разделит клетки заданного игрового поля между двумя государствами.
Входные данные
Первая строка входного файла содержит одно целое положительное число N, задающее размер игрового поля (\(1 \leq N \leq 50\)). Последующие N строк содержат по \(N\) заглавных латинских букв (без пробелов), кодирующих соответствующие клетки игрового поля: ‘C’ обозначает клетку, занятую городом, ‘D’ – пустую клетку. Гарантируется, что на поле есть хотя бы два города и всего их четное число.
Выходные данные
Выходной файл должен содержать \(N\) строк по \(N\) цифр (без пробелов) в каждой, кодирующих соответствующие клетки. Цифра 1 обозначает, что данная клетка принадлежит первому государству, цифра 2 – данная клетка принадлежит второму государству. Если решений несколько, необходимо вывести любое из них.
Система оценивания
Правильные решения для тестов, в которых всего два города, будут оцениваться из 40 баллов. Несмотря на выделение отдельной группы тестов с двумя городами, на окончательную проверку будут приниматься только решения, правильно работающие также для всех тестов из условия задачи.
Входные данные
3 DDD DDC DDC
Выходные данные
111 111 112
Входные данные
5 DDDDD CDCDC DCCDC DDDDD DDDDD
Выходные данные
11111 11111 12222 22222 22222
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesЧасто для пробного тура на различных олимпиадах по информатике предлагается задача «A + B», в которой по заданным целым числам \(A\) и \(B\) требуется найти их сумму. При проведении городской олимпиады по информатике председатель жюри решил сам подготовить тесты для такой задачи. Для этого он использовал свою оригинальную методику, которая заключалась в следующем: сначала готовятся предполагаемые правильные ответы, а затем подбираются входные данные, соответствующие этим ответам. Пусть председатель жюри выбрал число \(C\), запись которого состоит из \(n\) десятичных цифр и не начинается с нуля. Теперь он хочет подобрать такие целые положительные числа \(A\) и \(B\), чтобы их сумма была равна \(C\), и запись каждого из них также состояла из \(n\) десятичных цифр и не начиналась с нуля. В дополнение к этому председатель жюри старается подобрать такие числа \(A\) и \(B\), чтобы каждое из них было красивым. Красивым в его понимании является число, запись которого не содержит двух одинаковых подряд идущих цифр. Например, число 1272 считается красивым, а число 1227 — нет. Требуется написать программу, которая для заданного натурального числа \(C\) вычисляет количество пар красивых положительных чисел \(A\) и \(B\), сумма которых равна \(C\). Поскольку количество пар красивых чисел может быть большим, необходимо вывести остаток от деления этого количества на число \(10^9+7\).
Входные данные
Входной файл содержит одно целое положительное число \(C\). Число \(C\) не начинается с нуля. Количество цифр в записи числа \(С\) не превышает \(1000\).
Выходные данные
Выходной файл должен содержать одно целое число — остаток от деления количества искомых пар красивых чисел \(A\) и \(B\) на число \(10^9+7\).
Система оценивания
Правильные решения для тестов, в которых 1 ≤ C ≤ 999 (1 ≤ n ≤ 3), будут оцениваться из 25 баллов. Правильные решения для тестов, в которых 1 ≤ C ≤ 999 999 (1 ≤ n ≤ 6), будут оцениваться из 50 баллов. Несмотря на выделение отдельных групп тестов для различных длин числа C, на окончательную проверку будут приниматься только решения, правильно работающие для всех тестов из условия задачи.
Пояснения к тестам
Число 22 можно представить в виде суммы двузначных чисел тремя способами: 10 + 12, 11 + 11, 12 + 10. Способ 11 + 11 не подходит, поскольку число 11 не является красивым. Следовательно, ответ для числа 22 равен 2. Число 200 можно представить в виде суммы трехзначных чисел единственным способом: 100 + 100. Этот способ не подходит, поэтому ответ для числа 200 равен 0. Число 1000 нельзя представить в виде суммы четырехзначных чисел, поэтому ответ для числа 1000 аналогично равен 0.
Входные данные
Выходные данные
Входные данные
Выходные данные
Входные данные1000
Выходные данные
Входные данные
Выходные данные
ограничение по времени на тест
ограничение по памяти на тест
512 megabytesНа краю деревни растет старая березовая аллея. Аллея имеет форму прямой полосы шириной \(W\) метров. Вдоль левой стороны аллеи растет \(N\) берез, а вдоль правой — \(M\) берез, при этом \(i\)-я береза с левой стороны аллеи находится на расстоянии \(a_i\) метров от начала аллеи, а \(j\)-я береза с правой стороны — на расстоянии \(b_j\) метров от начала аллеи.

Отдыхая в деревне прошедшим летом, один юный информатик обнаружил, что кору берез стали грызть зайцы. Чтобы защитить деревья от зайцев, мальчик решил окружить березы красной лентой (зайцы не любят красный цвет и не станут заходить на огражденную лентой территорию. К сожалению, в его распоряжении оказалась только лента длиной \(L\) метров, которую, к тому же, нельзя было разрезать. Единственное, что можно было делать в этом случае — окружить этой лентой как можно больше берез. При этом, чтобы сохранить аллею, необходимо окружить на каждой стороне аллеи хотя бы одну березу. Требуется написать программу, которая по заданной длине ленты, ширине аллеи и положению берез на ней определяет максимальное число берез, которое можно окружить этой лентой. Считается, что березы представляются точками, толщиной берез и шириной ленты следует пренебречь.
Входные данные
Первая строка входного файла содержит два разделенных пробелом целых числа: длину ленты \(L\) и ширину аллеи \(W\) (\(1 \leq L \leq 2 \times 10^5\), \(1 \leq W \leq 10^4\)). Вторая и третья строки описывают березы вдоль левой стороны аллеи. Вторая строка содержит число \(N\) — количество берез (\(1 \leq N \leq 2000\)), а третья строка содержит \(N\) различных целых чисел \(a_1\), \(a_2\), …, \(a_N\) (\(0 \leq a_i \leq 10^5\)), заданных по возрастанию. Четвертая и пятая строки описывают березы вдоль правой стороны аллеи. Четвертая строка содержит число \(M\) — количество берез (\(1 \leq M \leq 2000\)), а пятая строка содержит \(M\) различных целых чисел \(b_1\), \(b_2\), …, \(b_M\) (\(0 \leq b_i ≤ 10^5\)), заданных по возрастанию.
Выходные данные
Выходной файл должен содержать одно целое число: максимальное количество берез, которое можно оградить заданной лентой. Гарантируется, что если максимальное число берез, которое можно оградить лентой длины L, равно X, то нет способа оградить (X + 1) березу лентой длины (L + \(10^<-5>\)).-5>
Система оценивания
Правильные решения для тестов, в которых 1 ≤ N + M ≤ 50, будут оцениваться из 30 баллов. Правильные решения для тестов, в которых 1 ≤ N + M ≤ 500, будут оцениваться из 60 баллов.
Входные данные
18 4 3 0 3 6 4 0 3 6 10
Выходные данные
Входные данные5 3 1 0 1 0
Выходные данные
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesЮный математик Матвей интересуется теорией вероятностей, и по этой причине у него всегда есть с собой несколько стандартных шестигранных игральных кубиков. Стандартный шестигранный кубик имеет три противолежащих пары граней, которые размечены таким образом, что напротив грани с числом 1 находится грань с числом 6, напротив грани с числом 2 — грань с числом 5 и напротив грани с числом 3 — грань с числом 4. Анализируя различные игры с шестигранными кубиками, Матвей придумал новую игру. В эту игру играют два игрока, и проходит она следующим образом: первый игрок бросает один или несколько стандартных кубиков (количество кубиков он определяет сам). После этого первому игроку начисляется количество очков, равное сумме чисел, оказавшихся на верхних гранях всех кубиков, а второму игроку — сумма чисел, оказавшихся на нижних гранях этих кубиков. Побеждает тот, кто набрал больше очков. Например, если был брошен один кубик, и на верхней его грани выпало число два, то первый игрок получает два очка, а второй — пять. В свою очередь, если было брошено два кубика и на их верхних гранях выпало по единице, то первый игрок получает также два очка, а второй игрок – двенадцать очков, так как на нижних гранях этих кубиков оказались шестерки. Матвей рассказал об этой игре своему другу, юному информатику Фоме, и они начали играть в неё через Интернет. Поскольку Фома не видит результат броска и не знает, сколько кубиков бросает Матвей как первый игрок, то о набранных каждым игроком очках он узнает только от Матвея. Чтобы проверить достоверность этой информации, Фома решил узнать, какое минимальное и максимальное количество очков мог получить он, как второй игрок, если известно, сколько очков набрал Матвей. Требуется написать программу, которая по количеству очков, которые набрал первый игрок после броска, определяет наименьшее и наибольшее количество очков, которые может получить второй игрок за этот бросок.
Входные данные
Первая строка входного файла содержит целое положительное число \(n\) — количество очков, которые получил первый игрок (\(1 \leq n \leq 10^<10>\)).10>
Выходные данные
Выходной файл должен содержать два разделенных пробелом целых числа: минимальное и максимальное количество очков, соответственно, которые мог набрать второй игрок при таком броске кубиков.
Система оценивания
Правильные решения для тестов, в которых 1 ≤ n ≤ 1000, будут оцениваться из 50 баллов.
Входные данные
Выходные данные5 12
Входные данные
Выходные данные6 216
ограничение по времени на тест
ограничение по памяти на тест
64 megabytes- Формально, строка S лексикографически больше строки T, если выполняется одно из двух условий: строка T получается из S удалением одной или более букв с конца строки S;
- первые (i - 1) символов строк T и S не различаются, а буква в i-й позиции строки T следует в алфавите раньше буквы в i-й позиции строки S.
Требуется написать программу, которая по именам отца и матери находит лексикографически наибольшее имя для их ребенка.
Входные данные
Первая строка входного файла содержит X — имя отца. Вторая строка входного файла содержит Y — имя матери. Каждое имя состоит из строчных букв латинского алфавита, включает хотя бы одну букву и имеет длину не более \(10^5\) букв.
Выходные данные
Выходной файл должен содержать искомое лексикографически наибольшее из возможных имен ребенка. В случае, если подходящего имени для ребенка не существует, выходной файл должен быть пустым.
Система оценивания
Правильные решения для тестов, в которых имена содержат только буквы «a» и «b» и имеют длину не более 1000, будут оцениваться из 20 баллов.
Правильные решения для тестов, в которых имена содержат только буквы «a» и «b» и имеют длину не более \(10^5\), будут оцениваться из 40 баллов.
Правильные решения для тестов, в которых имена имеют длину не более 1000, будут оцениваться из 40 баллов.
Несмотря на выделение отдельных групп тестов, на окончательную проверку будут приниматься только решения, правильно работающие для всех тестов, приведенных в условии задачи.
Входные данные
abcabca abcda
Выходные данные
Входные данныеccba accbbaa
Выходные данные
ccba
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesЮный футболист Митя обнаружил на школьном футбольном поле две различные окружности, нарисованные едва заметной белой краской. Вспомнив истории о загадочных кругах на полях, он отметил эти окружности с помощью небольших камушков. Митя разложил на поле n камушков так, чтобы каждый из них находился на одной из окружностей или даже на их пересечении, если эти окружности пересекаются. Получилось так, что на каждой окружности размещался хотя бы один камушек. Обладая великолепным глазомером, Митя расположил камушки на окружностях абсолютно точно, без какой-либо погрешности.
На следующий день пошел дождь, краска стерлась, и нарисованные окружности исчезли, но все камушки остались на своих местах. Теперь Мите очень нужно найти доказательство необычного явления, свидетелем которого он был, то есть, восстановить окружности.
Требуется написать программу, которая по координатам камушков на поле находит вариант размещения их на двух несовпадающих окружностях.
Входные данные
Первая строка входного файла содержит целое число n — количество размещенных Митей камушков на поле (\(2 \leq n \leq 2000\)). Последующие n строк содержат целочисленные координаты (\(x_i\), \(y_i\)) камушков — по одной паре координат, разделенных пробелом, в каждой строке (\(−10^6 \leq x_i, y_i \leq 10^6\)). Никакие два камушка не размещаются в одной точке.
Гарантируется, что ответ для заданного набора камушков существует.
Выходные данные
Выходной файл должен содержать две строки. Первая строка должна содержать последовательность номеров всех камушков, которые принадлежат первой окружности, вторая строка — последовательность номеров всех камушков, которые принадлежат второй окружности.
Каждый камушек должен встречаться хотя бы в одной из двух последовательностей. Если камушек встречается в обеих последовательностях, то это обозначает, что он находится на пересечении окружностей. Считается, что камушки пронумерованы от 1 до n в порядке их следования во входных данных.
Нумерация окружностей не имеет значения, то есть выводить две последовательности можно в любом порядке. Числа в последовательностях можно также выводить в произвольном порядке. Каждая из последовательностей должна содержать не менее одного числа. Все числа в строках должны быть разделены пробелами.
Если вариантов расположения окружностей несколько, можно выбрать любой из них.
Система оценивания
Правильные решения для тестов, в которых 2 ≤ n ≤ 50, будут оцениваться из 50 баллов.
Входные данные
7 1 -1 0 0 1 1 3 1 3 -1 2 0 4 0
Выходные данные
1 2 3 6 4 5 6 7
Входные данные
5 -1000000 0 0 1000000 1000000 0 0 -1000000 0 0
Выходные данные
1 2 3 4 5
ограничение по времени на тест
ограничение по памяти на тест
512 megabytesВ стране Триландии близятся выборы новых столиц. Столицы в Триландии необычные, поскольку ими являются одновременно сразу три различных города. Такая идея размещения столиц основана на исследованиях эффективности управления страной, выполненных ведущими экономистами Триландии.
Всего в Триландии n городов, из которых некоторые пары городов соединены дорогами, и по каждой из них можно проехать в обе стороны. Время проезда по каждой дороге в одну сторону равно одному часу. При этом все города соединены дорогами таким образом, что из каждого города можно добраться в любой другой, причем это можно сделать единственным способом, если по каждой дороге проезжать не более одного раза и только в одну сторону.
Как показали результаты проведенных триландскими экономистами исследований, управление страной будет наиболее эффективным, если три столицы будут выбраны так, что время кратчайшего пути между каждой парой столиц составит ровно d часов. Перед проведением выборов необходимо знать, сколько существует различных троек городов, удовлетворяющих описанным выше свойствам. Две тройки городов считаются различными, если в первой тройке есть хотя бы один город, которого нет во второй тройке, и наоборот.
Требуется написать программу, которая по количеству городов в Триландии и описанию дорог находит количество троек городов, которые могут быть столицами.
Входные данные
Первая строка входного файла содержит два разделенных пробелом целых числа: количество городов в Триландии n и требуемое время в пути между столицами d (\(3 \leq n \leq 10^5\), \(1 \leq d
ограничение по памяти на тест
256 megabytesВ фирме, в которой работает ваш друг, ввели новый дизайн билетов на маршрутки. Теперь номер билета может быть любым натуральным числом. Радостные пассажиры тут же придумали новый, очень простой способ определения счастливости номера билета. Он состоит в следующем. Пусть номер билета равен \(N\). Если \(N
ограничение по памяти на тест
256 megabytesВ последнее время в одной из школ Н. Новгорода, а также на одном из факультетов ННГУ стала очень популярна игра в настольный теннис. Игроки часто сталкиваются со следующей проблемой: довольно трудно уследить за всем ходом матча и при этом не сбиться со счёта, поэтому очень хотелось бы иметь программу, подсчитывающую счёт. Напишите программу, которая по данному протоколу матча восстановит итоговый счёт.
Протокол состоит из последовательности следующих событий: service, net, out, goal, return, eom.
События обозначают следующее:
* service — подача (при этом игрок ударяет по мячу). service — всегда первое событие во входном файле. После него могут следовать net, out, goal, return.
* net — мяч ударяется о половину поля того игрока, который ударял по мячу последним, слишком много раз. Игрок, который ударял по мячу последним, проигрывает розыгрыш. После этого события могут идти service или eom.
* out — мяч уходит в аут. Игрок, который ударял по мячу последним, проигрывает розыгрыш. После этого события могут идти service или eom.
* goal — игрок, который ударял по мячу последним, забивает гол (т.,е. выигрывает розыгрыш). Далее может быть service или eom.
* return — игрок отбивает мяч, ударяя по нему (игроки ударяют по мячу по очереди). Далее может быть net, out, goal, return.
* eom — матч окончен. Это всегда последнее событие.

Когда игрок выигрывает розыгрыш, ему начисляется очко. Когда игрок проигрывает розыгрыш, очко начисляется его противнику.
Подачи подаются по пять штук, т.,е. первые пять подач подаёт первый игрок, следующие пять — другой и т.д. Полное количество подач может быть не кратным пяти, в таком случае последняя серия подач будет короче пяти штук.
Конечно, в реальном матче может произойти ситуация, которую невозможно описать этими событиями, но ваша программа должна считать, что весь матч описывается данными во входном файле событиями.
Входные данные
Во входном файле находится список событий. События расположены по одному на строке без пробелов. Последовательность событий удовлетворяет всему, что было сказано выше; пустых строк во входном файле нет (кроме, возможно, строк после события eom). Всего событий не более 50000.
Выходные данные
В выходной файл выведите два числа: очки того, кто подавал первым, потом — очки его противника.
Входные данные
service goal service out service net service return return return out service return goal service goal eom
Выходные данные
Входные данныеservice out eom
Выходные данные
Источники: [ Личные олимпиады, Нижегородская олимпиада школьников, 2009, Задача E ]
ограничение по времени на тест
ограничение по памяти на тест
256 megabytes
На плоскости заданы дуга окружности, отрезок и точка. Как отрезок, так и дуга окружности непрозрачны. Определите, какая часть дуги видна из этой точки.
Входные данные
Входной файл состоит из трёх строк, описывающих данные объекты. Первая строка описывает дугу и содержит пять чисел — координаты центра дуги, радиус дуги, полярный угол точки начала дуги и полярный угол точки конца дуги. Полярные углы заданы в градусах и отсчитываются относительно центра дуги против часовой стрелки от положительного направления оси \(x\). Вторая строка описывает точку и содержит два числа — её координаты. Третья строка описывает отрезок и содержит четыре числа — координаты начала и конца отрезка. Все числа во входном файле вещественны и не превосходят \(10^6\) по модулю. Гарантируется, что как радиус окружности, так и длина отрезка больше нуля, что полярный угол конца дуги больше, чем полярный угол начала, и что разность этих углов не превосходит 360.
Гарантируются, что никакие два из данных трёх объектов не имеют общих точек.
Выходные данные
Выведите в выходной файл одно число на отрезке от 0 до 1 — относительную часть дуги, которая видна из данной точки. Ваш ответ должен отличаться от правильного не более, чем на 10 −4 .
Примечание
Система оценивания:- Группа тестов 1 (40 баллов). В этой группе во всех тестах дуга либо полностью видна, либо полностью не видна.
- Группа тестов 2 (60 баллов). Нет ограничений. Только при прохождении группы 1.
Входные данные
2 1 2 120 420 3 6 2 4 2.5 4
Выходные данные
0.496842552858631315
Источники: [ Личные олимпиады, Нижегородская олимпиада школьников, 2009, Задача C ]
ограничение по времени на тест
ограничение по памяти на тест
256 megabytesФирма, в которой работает ваш друг, решила воспользоваться удобным моментом и купила компанию, занимающуюся пригородными автобусными пассажирскими перевозками. Таким образом, фирма вашего друга расширяет область деятельности и будет теперь обслуживать и некоторые внутриобластные автобусные маршруты.
Сейчас руководство фирмы, и в том числе ваш друг, заняты оптимизацией работы этих маршрутов. Одна из основных проблем, которые были обнаружены, состоит в том, что большинство автобусов, использующихся там, очень старые и изношенные, и поэтому часто выходят из строя. В целях улучшения ситуации было принято решение о создании сети ремонтных подстанций, которые будут располагаться в некоторых населённых пунктах области и обслуживать другие близлежащие населённые пункты.
Система дорог в области устроена следующим простым образом. Есть \(N\) населённых пунктов, некоторые из которых соединены дорогами. Между каждой парой пунктов существует не более одной дороги, и более того, для каждой пары населённых пунктов есть ровно один способ добраться из одного в другой (возможно, через промежуточные посёлки).
В каждом населённом пункте можно разместить ремонтную подстанцию. В принципе, фирма может размещать как крупные подстанции, которые даже в одиночку смогут обслуживать всю область, но при этом будут требовать больших расходов на содержание, так и небольшие станции, которые будут обслуживать лишь прилегающие населённые пункты, но при этом будут обходиться намного дешевле. Фирма уже определила, что каждую подстанцию можно характеризовать параметром “мощность”, которая может принимать значения, являющиеся целыми положительными числами (равна нулю мощность быть не может). Подстанция с мощностью \(k\) будет обслуживать населённый пункт u, в котором она расположена, и все другие населённые пункты, до которых можно добраться из u, использовав не более k дорог (т.е. при \(k\)=1, например, подстанция обслуживает свой населённый пункт и все, которые напрямую соединены с ним дорогой). Стоимость содержания такой подстанции пропорциональна её мощности.
Теперь перед руководством фирмы и, в частности, вашим другом, стоит задача придумать схему расположения подстанций в населённых пунктах области так, чтобы, во-первых, каждый населённый пункт обслуживался хотя бы одной подстанцией, а во-вторых, суммарная мощность созданных подстанций была минимальна.
Как показывает статистика, автобусы намного реже ломаются на дорогах, чем внутри населённых пунктов, где они вынуждены часто изменять скорость, останавливаться, трогаться с места, заводить двигатель и т.д., поэтому не важно, все ли дороги обслуживаются — главное, чтобы обслуживались все населённые пункты.
Входные данные
В первой строке входного файла находится одно число \(N\) — количество населённых пунктов в области (1
ограничение по памяти на тест
64 megabytesВ Команде проходит традиционная ежегодная олимпиада по теории магии среди младшекурсников. Завхозу смены Кате Медведевой поручили заняться распределением студентов по аудиториям.
Каждый факультет выставил своих лучших учеников на олимпиаду. От Звездочек участвует G студентов, от Солнышек S студентов, Травинок представляет H студентов и Подсолнухов — R студентов. В распоряжении Медведевой находится M аудиторий. На аудитории наложено особое заклятие расширения, поэтому при необходимости они могут вместить любое количество студентов. При рассадке необходимо учесть, что ученики одного факультета, находящиеся в одной аудитории, могут, воспользовавшись случаем, начать жульничать, обмениваясь идеями по решению задач. Поэтому в любой аудитории количество студентов с одного факультета, попавших в нее, следует свести к минимуму. Назовем рассадку, удовлетворяющую такому требованию, оптимальной.
Помогите посчитать, какое минимальное количество студентов с одного факультета все же придется посадить в одной аудитории даже при оптимальной рассадке.
Входные данные
В первой строке идут четыре целых числа G , S , H и R ( 1 ≤ G, S, H, R ≤ 1000 ) — количество учеников, представляющих каждый из факультетов школы.
Во второй строке идет целое число M ( 1 ≤ M ≤ 1000 ) — количество классов в распоряжении у завхоза.
Выходные данные
Выведите минимальное количество студентов с одного факультета, которое Кате придётся посадить в одну аудиторию даже при оптимальной рассадке.
Примеры тестов
Входные данные
4 3 4 4
2
Выходные данные
Входные данные
15 14 13 14
5
Выходные данные
Источники: [ Личные олимпиады, Московская олимпиада школьников, 6-9 классы, 2013, Задача C ]
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesЛёша сидел на лекции. Ему было невероятно скучно. Голос лектора казался таким далеким и незаметным.
Чтобы окончательно не уснуть, он взял листок и написал на нём свое любимое слово. Чуть ниже он повторил своё любимое слово, без первой буквы. Ещё ниже он снова написал своё любимое слово, но в этот раз без двух первых и последней буквы.
Тут ему пришла в голову мысль — времени до конца лекции все равно ещё очень много, почему бы не продолжить выписывать всеми возможными способами это слово без какой-то части с начала и какой-то части с конца?
После лекции Лёша рассказал Максу, как замечательно он скоротал время. Максу стало интересно посчитать, сколько букв каждого вида встречается у Лёши в листочке. Но к сожалению, сам листочек куда-то запропастился.
Макс хорошо знает любимое слово Лёши, а ещё у него не так много свободного времени, как у его друга, так что помогите ему быстро восстановить, сколько раз Лёше пришлось выписать каждую букву.
Входные данные
На вход подаётся строка, состоящая из строчных латинских букв — любимое слово Лёши.
Длина строки лежит в пределах от 5 до 100 000 символов.
Выходные данные
Для каждой буквы на листочке Лёши, выведите её, а затем через двоеточие и пробел сколько раз она встретилась в выписанных Лёшей словах (см. формат вывода в примерах). Буквы должны следовать в алфавитном порядке. Буквы, не встречающиеся на листочке, выводить не нужно.
Примеры тестов
Входные данные
hello
Выходные данные
e: 8
h: 5
l: 17
o: 5
Входные данные
abacaba
Выходные данные
a: 44
b: 24
c: 16
Примечание- "hello"
- "hell"
- "ello"
- "hel"
- "ell"
- "llo"
- "he"
- "el"
- "ll"
- "lo"
- "h"
- "e"
- "l"
- "l"
- "o"
Источники: [ Личные олимпиады, Московская олимпиада школьников, 6-9 классы, 2013, Задача E ]
ограничение по времени на тест
ограничение по памяти на тест
64 megabytesМаленький Петя очень любит компьютеры и хочет научиться программировать.
В небольшом городке Маховники, где он живёт, работает сеть кружков по программированию самой разной тематики. Когда Петя пошёл записываться, он увидел большой список, состоящий из N кружков. Петя хочет быть всесторонне развитой личностью, поэтому он собрался отучиться во всех этих кружках. Но когда он собрался записаться на все занятия сразу, обнаружилось, что не всё так просто. Во-первых, в один момент времени разрешается учиться только в одном из этих N кружков. Во-вторых, некоторые преподаватели выдвигают входные требования к знаниям учеников, заключающиеся в знании курсов каких-то других кружков!
Петя хочет стать великим программистом, поэтому подобные мелочи его не останавливают. Действительно, ему достаточно всего-лишь составить правильный порядок посещения кружков, чтобы удовлетворить всем входным требованиям — это совсем простая задача, доступная даже совсем неопытному программисту.
Перед тем как сесть составлять порядок посещения кружков, Петя внимательно перечитал условия обучения и обнаружил ещё один важный пункт. Оказывается, для привлечения школьников, во всех кружках действует система поощрения учеников конфетами. Это означает, что по окончании очередного кружка ученику выдают несколько коробок конфет, всё больше и больше с каждым пройденным кружком. С другой стороны, в каждом кружке количество конфет в коробке своё, зависящее от сложности курса. Более конкретно — за прохождение i -го по счёту кружка, если этот кружок идёт в общем списке под номером j , ученику выдают аж N i - 1 ·j конфет — такие щедрые люди программисты.
Петя решил совместить полезное с приятным — теперь он хочет выбрать такой порядок посещения кружков, чтобы при этом получить как можно больше конфет, однако эта задача ему уже не под силу. Помогите будущему великому человеку отыскать такой порядок.
Входные данные
В первой строке входного файла содержится целое число N ( 1 ≤ N ≤ 100 000 ) — количество кружков в Маховниках.
В последующих N строках идут описания входных требований кружков, в порядке их следования в общем списке. В i -ой строке сначала записано целое число ki ( 0 ≤ ki ≤ N - 1 ) — количество кружков, в которых нужно отучиться перед записью в i -й кружок, а потом ki номеров этих кружков.
Сумма ki не превосходит 200 000 .
Гарантируется, что возможно посетить все эти кружки в некотором порядке, не нарушая условия посещения.
Выходные данные
Выведите N номеров, разделённых пробелами — порядок, в котором Пете надо посещать кружки, чтобы съесть как можно больше конфет.
Примеры тестов
Входные данные
6
1 2
0
1 2
3 1 2 5
1 2
4 1 3 4 5
Выходные данные
2 1 3 5 4 6
ПримечаниеПояснение к примеру. Посещая кружки в указанном порядке, Петя получит 6 0 ·2 + 6 1 ·1 + 6 2 ·3 + 6 3 ·5 + 6 4 ·4 + 6 5 ·6 = 2 + 6 + 108 + 1080 + 5184 + 46656 = 53036 конфет.
Источники: [ Личные олимпиады, Нижегородская олимпиада школьников, 2013, Задача A ]
ограничение по времени на тест
ограничение по памяти на тест
256 megabytesОценив последние успехи вашего друга в экономическом отделе компании, владеющей сетью маршрутных такси, директор повысил его до главного диспетчера. Теперь друг указывает, на какой маршрут должна выходить та или иная маршрутка.
В автопарке компании есть \(n\) маршруток, \(i\)-ая маршрутка номинально вмещает \(a_i\) пассажиров. По договору с департаментом транспорта города компания обязана обслуживать \(m\) маршрутов. Накопленная статистика говорит, что оптимальнее всего, если \(j\)-ый маршрут обслуживает такси номинальной вместимостью \(b_j\) пассажиров. Каждая маршрутка приписывается не более чем к одному маршруту, каждому маршруту приписывается не более одной маршрутки.
- если \(i\)-ая маршрутка обслуживает \(j\)-ый маршрут, то компания теряет \(|a_i-b_j|\) у.е., так как чем меньше заполнено такси, тем больше не используются его возможности, а чем больше переполнено такси, тем чаще его приходится ремонтировать;
- от каждой простаивающей маршрутки, то есть такой, которой не назначен ни один маршрут, компания несет убыток \(p\) у.е.;
- компании приходится платить штраф \(q\) у.е. департаменту транспорта за каждый не обслуживаемый маршрут.
Входные данные
В первой строке входного файла находятся четыре целых числа — \(n\), \(m\), \(p\), \(q\) (\(1\leq n,m \leq 10^3\), \(0 \leq p,q \leq 10^4\)). Во второй строке через пробел указаны целые числа \(a_1\), . \(a_n\) (\(1\leq a_i \leq 10^4\)). В третьей строке через пробел указаны целые числа \(b_1\), . \(b_m\) (\(1\leq b_j \leq 10^4\)).
Выходные данные
Выведите единственное число — минимально возможные потери компании.
ПримечаниеВ примере 1 первая маршрутка назначена на второй маршрут с потерями \(|22-20|=2\) у.е., вторая маршрутка назначена на первый маршрут с потерями \(|12-11|=1\) у.е.. Итого: потери 3 у.е.. В примере 2 одна из маршруток назначается на единственный маршрут с нулевым штрафом, а вторая вынуждена простаивать. Итого: потери 100 у.е.
Входные данные
2 2 100 100 22 12 11 20
Выходные данные
Входные данные2 1 100 500 13 13 13
Выходные данные
Источники: [ Личные олимпиады, Нижегородская олимпиада школьников, 2013, Задача B ]
ограничение по времени на тест
ограничение по памяти на тест
256 megabytesВ Тридевятом царстве царь был любителем разных заморских традиций. Как прознает, что в другом царстве есть какой-то обычай, сразу думает, как бы его к тридевятым реалиям приспособить. Вот неделю назад вернулось посольство из Тридесятого царства. И главный посол доложил царю: дескать, придумал Тридесятый царь следующую вещь. Чтобы как-то зарегулировать гуляния народные, повелел он указать определенные дни, и в эти дни устраивать широкие гуляния, а в остальные дни массовые сборища запретить. И с тех пор жизнь в Тридесятом царстве стала прекрасной: гулять так гулять, работать так работать, и все строго по цареву указу. Понравилась мысль такая царю Тридевятого царства. Подумал он ввести и у себя такие порядки. Собрал царь советников своих, и говорит: подготовьте мне список дней, в которые гулять можно. Только не на год, а на \(N\) дней вперед — посмотрим, дескать, что получится; понравится — сделаем круглогодичным. И вот вчера принесли советники царю список. Но вот незадача: каждый советник свой список приготовил, да еще и обоснование предложил, какой праздник в какой из этих дней надо отмечать. И у всех советников праздники важные, но у всех — разные! Царь думал-думал и решил: а возьмем их все — объединим предложения советников! Если какой-то день есть в списке хотя бы одного советника, то объявим этот день праздничным, и пускай народ гуляет! Глядишь, и не будет недовольных. Только одна проблема осталась: некоторые дни оказались в списках сразу у нескольких советников. Но царь и тут нашел выход: перенесем некоторые праздники на более поздние дни, так, чтобы в каждый день получался только один праздник, и переносы были бы как можно короче. Пусть, например, четыре советника сразу предложили сделать некоторый день (пускай день 5) праздничным. Тогда перенесем три из этих четырех праздников на дни 6, 7 и 8 — так, что праздничными будут дни с 5 по 8 включительно. А если оказывается, что, например, день 7 тоже предложен в качестве праздничного кем-нибудь из советников, то перенесем этот праздник еще дальше — на день 9. Напишите программу, которая, зная предложения советников, определит, какие дни будут праздничными, а какие нет. Не забывайте, что праздники можно переносить только на более поздние дни; на более ранние переносить нельзя.
Входные данные
На первой строке входного файла находится одно число \(N\) — количество дней, на которые царь хочет произвести планировку праздников. На второй строке входного файла находятся \(N\) неотрицательных целых чисел — для каждого дня указано, сколько советников предложили считать его праздничным. Гарантируется, что \(1\leq N\leq 100\,000\), и что сумма всех чисел во второй строке входного файла не превосходит \(100\,000\).
Выходные данные
В выходной файл выведите одну строку, состоящую из символов “ + ” или “ - ”. “ + ” обозначайте праздничный день, “ - ” — непраздничный. Выведите как минимум \(N\) символов — по одному для каждого из дней, на которые проводится планирование. Но если праздники приходится переносить на дни после \(N\)-го (что допустимо), то выведите больше символов — до последнего праздничного дня. Символы разделяйте пробелами.
Система оценки
- Подзадача 0 (0 баллов) тест из условия.
- Подзадача 1 (50 баллов) \( N \le 1000 \). Необходимые подгруппы: 0.
- Подзадача 2 (50 баллов) без дополнительных ограничений. Необходимые подгруппы: 0-1.