М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Виталий5546
Виталий5546
01.01.2021 12:52 •  Информатика

. на питоне Игра с нулями и единицами
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Что еще мы вам не рассказали про строки из нулей и единиц? :)
Оказывается, со строкой из нулей и единиц можно играть. Петя и Вася берут случайную строку
длины n и играют в игру по следующим правилам. Петя ходит первым и может зачеркнуть единицу
на крайнем левом или крайнем правом месте строки (если по краям строки стоят нули, то Петя сразу
проиграл). Вася ходит вторым, и в оставшейся строке он может зачеркнуть на первом или последнем
месте строки ноль, если он там есть, иначе он проиграл. Далее мальчики продолжают ходить по
очереди по этим правилам, пока кто-нибудь не проиграет, так как не сможет сделать очередной ход.
Другой игрок при этом наберет одно очко + столько очков, сколько составит длина оставшейся
строки. Если проигравшему игроку достаётся пустая строка, то игрок, сделавший последний ход,
выигрывает со счётом 1. Каждый из игроков хочет выиграть и набрать при этом как можно больше
очков.
Предположим, например, что они играют со следующей строкой: 10100011. В свой первый ход
Петя может удалить крайнюю левую или крайнюю правую единицу. Предположим, он выбирает
крайнюю левую. Тогда строка станет 0100011. Тогда Васе не останется ничего другого, как убрать
новый крайний левый ноль, так как крайний правый символ единица, и останется строка 100011.
Петя снова может выбирать, и на этот раз он выбирает крайнюю правую единицу, оставляя 10001
Васе. На данный момент у Васи нет подходящего хода, поэтому победил Петя. Поскольку длина
оставшейся строки 5, Петя побеждает со счётом 1 + 5 = 6 очков. Но если бы Петя первым ходом
вычеркнул последнюю единицу, то ходов у Васи больше не было, и Петя бы выиграл со счётом
1 + 7 = 8.
Требуется написать программу, которая по строке из нулей и единиц определит, кто выиграет
при оптимальной игре обоих, и сколько очков он при этом наберёт.
Формат входных данных
В единственной строке входных данных находится непустая строка из нулей и единиц, длина
которой не превосходит 10.
Формат выходных данных
Выведите сначала символ 1, если при оптимальной игре обоих игроков выиграет Петя, или
символ 0, если выиграет Вася. Затем через пробел выведите, сколько очков наберёт победивший
игрок.
Примеры
стандартный ввод стандартный вывод
01 0 1
100 0 2
10100011 1 8

👇
Открыть все ответы
Ответ:
Nemosing
Nemosing
01.01.2021

Логическая функция - взаимосвязь между различными высказываниями, которые мы называем аргументами функции. Похожа на обычную числовую функцию, только вместо чисел - высказывания.

Логическое выражение - это конструкция в языке программирования, которая при выполнении даёт результат "истина" или "ложь".

Общее этих понятий в том, что они используются, например, в программе Excel, а также они связаны скорее не с числами, а с утверждениями. А разница в том, что первое - это зависимость, а второе - конструкция.

4,4(75 оценок)
Ответ:
Whitewarrior98
Whitewarrior98
01.01.2021

PascalABC.NET 3.5.1

program D_contest;

type

 TStat = record

   nick: string;

   wins, battles: integer;

   proc: real;

 end;

var

 N, i, num: integer;

 str: array of string;

 stat: array of TStat;

 nick: string;

function found(ni_ck: string): integer;

begin

 found := -1;

 for var e := 0 to Length(stat) - 1 do

 begin

   if stat[e].nick = ni_ck then  

   begin

     found := e;

     break;

   end;

 end;

end;

var

 v_pts, e_pts, l_e: integer;  

 F: textfile;

 k: real;

 s: string;

begin

 Assign(F, 'input.txt');

 Reset(F);

 readln(F, n);

 SetLength(str, n);

 SetLength(stat, 1);

 for i := 0 to n - 1 do

 begin

   readln(F, str[i]);    

   //get enemy_nick

   nick := Copy(str[i], 1, Pos(' ', str[i]) - 1);    

   Delete(str[i], 1, Pos(' ', str[i]));

   

   if (stat[0].nick <> '') then

   begin

     num := found(nick);

     if (num = -1) then //not found

     begin

       l_e := Length(stat);

       SetLength(stat, l_e + 1);

       num := l_e;

       stat[num].nick := nick;

     end;

   end

     else

   begin

     stat[0].nick := nick;

   end;

   

   stat[num].battles += 1;

   

     //get Vania_points

   v_pts := StrToInt(Copy(str[i], 1, Pos(' ', str[i])));    

   Delete(str[i], 1, Pos(' ', str[i]));

   

     //get enemy_points

   e_pts := StrToInt(str[i]);

   

   if v_pts > e_pts Then

     stat[num].wins += 1;

 end;

 Close(F);        

 

 //вычисляю процент побед

 for i := 0 to Length(stat) - 1 do

 begin

   stat[i].proc := stat[i].wins / stat[i].battles;  

 end;

 

 //сортировка по процентам

 for i := 0 to Length(stat) - 2 do  

 begin

   for var j := 0 to Length(stat) - i - 2 do  

   begin

     if stat[j].proc > stat[j + 1].proc then  

     begin

       k := stat[j].proc;

       stat[j].proc := stat[j + 1].proc;

       stat[j + 1].proc := k;

       

       s := stat[j].nick;

       stat[j].nick := stat[j + 1].nick;

       stat[j + 1].nick := s;

     end;

   end;

 end;

 

 //сортировка по алфавиту

 for i := 0 to Length(stat) - 2 do  

 begin

   for var j := 0 to Length(stat) - i - 2 do  

   begin

     if (stat[j].proc = stat[j + 1].proc) and (stat[j].nick > stat[j + 1].nick) then  

     begin

       k := stat[j].proc;

       stat[j].proc := stat[j + 1].proc;

       stat[j + 1].proc := k;

       

       s := stat[j].nick;

       stat[j].nick := stat[j + 1].nick;

       stat[j + 1].nick := s;

     end;

   end;

 end;

 

 writeln(Length(stat));

 for i := 0 to Length(stat) - 1 do

 begin

   write(stat[i].nick, ' ');

   writeln(stat[i].proc * 100:0:6);

 end;

end.

Объяснение:

Смотри код

4,6(95 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ