Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Задача 2. Поиск «суфлёра»
- Имя входного файла: input.txt
- Имя выходного файла: output.txt
- Ограничение по времени: 1 секунда
- Ограничение по памяти: 256 мегабайт
- Учитель математики Семён Владимирович в конце каждой четверти устраивает своим
- ученикам устный экзамен. Не секрет, что существуют неблагоразумные личности, прибегающие к различным хитростям, чтобы сдать экзамены с меньшими усилиями.
- Семён Владимирович подозревает, что его ученикам помогает сдавать экзамен некий
- «суфлер», который пытается подорвать учебный процесс, и специально подсказывает им
- неправильные ответы.
- Чтобы понять, существует «суфлёр» или нет, учитель вычисляет подозрительность ответа
- каждого ученика.
- Правильный ответ и ответы всех учеников — это строки одинаковой длины. Подозрительность ответа равна длине максимальной последовательности подряд идущих символов,
- которые отличаются в ответе ученика от соответствующей последовательлности в правильном ответе.
- Формально, пусть 𝑝1𝑝2...𝑝𝑁 — правильный ответ, 𝑠1𝑠2...𝑠𝑁 — ответ ученика. Тогда подозрительность ответа равна max
- 16𝑙6𝑟6𝑁
- 𝑟 − 𝑙 + 1 среди таких 𝑙 и 𝑟, что 𝑝𝑙 ̸= 𝑠𝑙
- , 𝑝𝑙+1 ̸= 𝑠𝑙+1, ...,
- 𝑝𝑟 ̸= 𝑠𝑟.
- Если максимальная подозрительность среди всех ответов достигает порога 𝑅, экзаменатор понимает, что «суфлёр» все-таки существует. После этого экзамен останавливается, и
- все ученики отправляются на пересдачу. Помогите учителю понять, существует «суфлер»
- или нет.
- Формат входных данных
- В первой строке входного файла записаны три целых числа 𝑁, 𝑀, 𝑅 — длина одного ответа, количество учеников, сдающих экзамен, и порог подозрительности лектора
- (1 6 𝑁, 𝑀, 𝑁 · 𝑀, 𝑅 6 3 · 105
- ).
- Далее следуют 𝑀 +1 строк, каждая из которых состоит из 𝑁 строчных английских букв.
- В первой строке записан правильный ответ, в следующих строках — ответы учеников.
- Формат выходных данных
- Для каждого ответа ученика в соответствующую строку выходного файла нужно вывести
- его подозрительность.
- В последней строке должно быть записано слово YES, если «суфлёр» существует, и NO —
- иначе.
- Система оценки
- Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены.
- Подзадача Баллы Ограничения Необходимые подзадачи
- 1 0 Тесты из условия
- 2 42 1 6 𝑁, 𝑀 6 100 1
- 3 58 Нет дополнительных ограничений 1, 2
- Страница 4 из 14
- Всесибирская открытая олимпиада школьников по информатике
- Отборочный очный этап, 9-11 классы, 27 ноября 2022 г.
- Пример
- input.txt output.txt
- 4 4 3
- file
- fall
- byte
- ball
- file
- 1
- 3
- 2
- 0
- YES
- */
- #include<iostream>
- #include<vector>
- #include<stdint.h>
- #include<fstream>
- #include<string>
- #include<algorithm>
- #define all(container) (container.begin(), container.end())
- #define fors(counter, start, finish) for (int counter = start; counter < finish; ++counter);
- #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter);
- #define vec(type) std::vector<type>
- #define dvec(type) std::vector<std::vector<type>>
- #define ll int64_t
- //#define fin std::cin
- //#define fout std::cout
- int main() {
- std::ifstream fin("input.txt");
- std::ofstream fout("output.txt");
- int n, m, r;
- fin >> n >> m >> r;
- std::string ans;
- fin >> ans;
- bool f = false;
- for (int i = 0; i < m; ++i) {
- std::string s;
- fin >> s;
- int k = 0, temp = 0;
- for (int i = 0; i < n; ++i) {
- if (ans[i] != s[i]) {
- temp++;
- }
- else {
- temp = 0;
- }
- k = std::max(temp, k);
- }
- if (k >= r)
- f = true;
- fout << k << std::endl;
- }
- if (f) {
- fout << "YES" << std::endl;
- return 0;
- }
- fout << "NO" << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment