В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
Lartenok
Lartenok
11.01.2020 08:02 •  Информатика

Задача C. Кибер-взлом Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 2 секунды
Ограничение по памяти: 512 мегабайт
Ви пытается взломать сервера корпорации Арасака, чтобы отключить охрану и проникнуть в
их офис. Искусственный интеллект сервера пытается ему в этом помешать.
Взлом происходит следующим образом. Рассмотрим ориентированный граф, на каждом ребре
которого написана буква английского алфавита. Граф может содержать кратные ребра и даже
петли. У Ви есть токен, изначально находящийся в некоторой вершине v, и у ИИ сервера есть
токен, изначально находящийся в некоторой вершине u. Затем они по-очереди совершают ходы, Ви
ходит первым. На своём ходу Ви выбирает произвольное ребро, исходящее из вершины, в которой
находится его токен. Он перемещает токен по этому ребру, а также пытается произвести атаку типа
c, где c — символ, написанный на выбранном ребре. ИИ на своём ходу также выбирает одно из
рёбер, исходящих из вершины, в которой находится его токен, и перемещает токен по этому ребру.
При этом, чтобы успешно отразить атаку, он должен выбрать ребро, на котором написан тот же
символ c.
Если Ви не может сделать ход, потому что из вершины, в которой находится его токен, не исходит
ни одного ребра, взлом завершается провалом. Если ИИ не может выбрать ребро, исходящее из
вершины, в которой находится его токен, на котором написан символ c, взлом завершается успешно.
Также, возможна ситуация, в которой Ви и ИИ будут делать ходы бесконечно долго.
Ви определить количество стартовых состояний, то есть пар вершин v и u, при которых
взлом будет произведен успешно при оптимальных действиях Ви и ИИ.
Формат входных данных
В первой строке даны два целых числа n и m — количество вершин и ребер в графе (1 6 n 6 1 000,
0 6 m 6 1 000).
В следующих m строках дано описание ребер графа. Каждая строка содержит два целых числа
ai и bi и строчную букву английского алфавита ci
, они обозначают ребро из вершины ai в вершину
bi
, на котором написан символ ci (1 6 ai
, bi 6 n).
Формат выходных данных
Выведите одно число — искомое количество стартовых состояний.
Система оценки
за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи
и необходимых подзадач успешно пройдены.
Подзадача Ограничения Необходимые
подзадачи
Информация
о проверке
1 12 n, m 6 10 первая ошибка
2 21 n, m 6 100 1 первая ошибка
3 22 ci = ‘a’ первая ошибка
4 22 Граф является ациклическим первая ошибка
5 23 Без дополнительных ограничений 1–4 первая ошибка
Примеры
стандартный ввод стандартный вывод
3 3
1 2 a
2 3 b
3 1 c
6
5 10
2 2 c
3 5 b
5 4 b
2 3 b
3 5 c
3 1 b
4 2 a
4 4 a
2 4 b
2 5 c
15
Замечание
В первом примере, если изначально токены Ви и ИИ стоят в одной и той же вершине, процесс
никогда не завершится. Во всех остальных случаях, взлом будет успешным.

Показать ответ
Ответ:
elvirabondar2
elvirabondar2
17.10.2022 12:26
var  mas1, mas2: array[0..9] of integer;  t, k, i, j: integer; 
begin  
readln(t);  
readln(k);  
for j := 0 to 1 do  begin   
      if (j = 1) then writeln();        
                 for i := 0 to 9 do    begin      
                          if(j = 0) then begin       
                                  mas1[i] := random(100);        
                                    write(mas1[i], ' ');       
                                    if mas1[i] > t Then mas1[i] := mas1[i] + 4;      
                              end      
                            else 
                               begin       
                                      mas2[i] := random(100);        
                                      write(mas2[i], ' ');       
                                       if mas2[i] > 10 * K Then         
                                            mas2[i] := mas2[i] + K;      
                                end;    
                       end;       
                  for i := 0 to 9 do     
                         if (j = 0) then 
                               write(mas1[i]) 
                        else 
                                write(mas2[i]);    
               writeln();  
           end;  
readln();
end.

))
0,0(0 оценок)
Ответ:
saimon0
saimon0
17.10.2022 12:26
Uses Crt;
const
  n=10;
var
  a,b:array[1..n] of integer;
  i,k,t:integer;
begin
  ClrScr;
  Randomize;
  for i:=1 to n do begin
    a[i]:=Random(50);
    Write(a[i],' ')
    end;
  Writeln;
  for i:=1 to n do begin
    b[i]:=Random(50);
    Write(b[i],' ')
    end;
  Writeln;
  Write('k t='); Read(k,t);
  for i:=1 to n do begin
    if a[i]>t then a[i]:=a[i]+4;
    Write(a[i],' ')
    end;
  Writeln;
  for i:=1 to n do begin
    if b[i]>10*k then b[i]:=b[i]+k;
    Write(b[i],' ')
    end;
  Readkey
end.

Тестовое решение:
1 6 23 12 47 1 44 24 6 18
31 30 30 29 0 3 43 32 46 21
k t=2 20
1 6 27 12 51 1 48 28 6 18
33 32 32 31 0 3 45 34 48 23
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота