egogoboy

всесиб 2

Nov 27th, 2022
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.47 KB | None | 0 0
  1. /*Задача 2. Поиск «суфлёра»
  2. Имя входного файла: input.txt
  3. Имя выходного файла: output.txt
  4. Ограничение по времени: 1 секунда
  5. Ограничение по памяти: 256 мегабайт
  6. Учитель математики Семён Владимирович в конце каждой четверти устраивает своим
  7. ученикам устный экзамен. Не секрет, что существуют неблагоразумные личности, прибегающие к различным хитростям, чтобы сдать экзамены с меньшими усилиями.
  8. Семён Владимирович подозревает, что его ученикам помогает сдавать экзамен некий
  9. «суфлер», который пытается подорвать учебный процесс, и специально подсказывает им
  10. неправильные ответы.
  11. Чтобы понять, существует «суфлёр» или нет, учитель вычисляет подозрительность ответа
  12. каждого ученика.
  13. Правильный ответ и ответы всех учеников — это строки одинаковой длины. Подозрительность ответа равна длине максимальной последовательности подряд идущих символов,
  14. которые отличаются в ответе ученика от соответствующей последовательлности в правильном ответе.
  15. Формально, пусть 𝑝1𝑝2...𝑝𝑁 — правильный ответ, 𝑠1𝑠2...𝑠𝑁 — ответ ученика. Тогда подозрительность ответа равна max
  16. 16𝑙6𝑟6𝑁
  17. 𝑟 − 𝑙 + 1 среди таких 𝑙 и 𝑟, что 𝑝𝑙 ̸= 𝑠𝑙
  18. , 𝑝𝑙+1 ̸= 𝑠𝑙+1, ...,
  19. 𝑝𝑟 ̸= 𝑠𝑟.
  20. Если максимальная подозрительность среди всех ответов достигает порога 𝑅, экзаменатор понимает, что «суфлёр» все-таки существует. После этого экзамен останавливается, и
  21. все ученики отправляются на пересдачу. Помогите учителю понять, существует «суфлер»
  22. или нет.
  23. Формат входных данных
  24. В первой строке входного файла записаны три целых числа 𝑁, 𝑀, 𝑅 — длина одного ответа, количество учеников, сдающих экзамен, и порог подозрительности лектора
  25. (1 6 𝑁, 𝑀, 𝑁 · 𝑀, 𝑅 6 3 · 105
  26. ).
  27. Далее следуют 𝑀 +1 строк, каждая из которых состоит из 𝑁 строчных английских букв.
  28. В первой строке записан правильный ответ, в следующих строках — ответы учеников.
  29. Формат выходных данных
  30. Для каждого ответа ученика в соответствующую строку выходного файла нужно вывести
  31. его подозрительность.
  32. В последней строке должно быть записано слово YES, если «суфлёр» существует, и NO —
  33. иначе.
  34. Система оценки
  35. Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены.
  36. Подзадача Баллы Ограничения Необходимые подзадачи
  37. 1 0 Тесты из условия
  38. 2 42 1 6 𝑁, 𝑀 6 100 1
  39. 3 58 Нет дополнительных ограничений 1, 2
  40. Страница 4 из 14
  41. Всесибирская открытая олимпиада школьников по информатике
  42. Отборочный очный этап, 9-11 классы, 27 ноября 2022 г.
  43. Пример
  44. input.txt output.txt
  45. 4 4 3
  46. file
  47. fall
  48. byte
  49. ball
  50. file
  51. 1
  52. 3
  53. 2
  54. 0
  55. YES
  56. */
  57.  
  58. #include<iostream>
  59. #include<vector>
  60. #include<stdint.h>
  61. #include<fstream>
  62. #include<string>
  63. #include<algorithm>
  64. #define all(container) (container.begin(), container.end())
  65. #define fors(counter, start, finish) for (int counter = start; counter < finish; ++counter);
  66. #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter);
  67. #define vec(type) std::vector<type>
  68. #define dvec(type) std::vector<std::vector<type>>
  69. #define ll int64_t
  70. //#define fin std::cin
  71. //#define fout std::cout
  72.  
  73. int main() {
  74.     std::ifstream fin("input.txt");
  75.     std::ofstream fout("output.txt");
  76.     int n, m, r;
  77.     fin >> n >> m >> r;
  78.     std::string ans;
  79.     fin >> ans;
  80.     bool f = false;
  81.     for (int i = 0; i < m; ++i) {
  82.         std::string s;
  83.         fin >> s;
  84.         int k = 0, temp = 0;
  85.         for (int i = 0; i < n; ++i) {
  86.             if (ans[i] != s[i]) {
  87.                 temp++;
  88.             }
  89.             else {
  90.                 temp = 0;
  91.             }
  92.             k = std::max(temp, k);
  93.         }
  94.         if (k >= r)
  95.             f = true;
  96.         fout << k << std::endl;
  97.     }
  98.     if (f) {
  99.         fout << "YES" << std::endl;
  100.         return 0;
  101.     }
  102.     fout << "NO" << std::endl;
  103.     return 0;
  104. }
Tags: olimp
Advertisement
Add Comment
Please, Sign In to add comment