Processing math: 100%

3-й этап Республиканской олимпиады по информатике 2021-2022, 2 тура


Задача A. Спортивные программисты

Ограничение по времени:
1 секунда
Ограничение по памяти:
256 мегабайт

Ассоциация спортивных программистов Казахстана решила организовать забег перед Олимпиадой. В забеге приняло участие N человек. На старте бегуны расположились друг за другом в линию в порядке от 1 до N. Когда был дан свисток, участники забега ринулись с мест, при этом поддерживая порядок кто за кем бежит. Участник с номером 1 бежит первым, а участник с номером N — последним. Но какой же это забег, если никто никого не обгоняет? Обгон происходит, когда у одного из участников развязываются шнурки на кроссовках. Пока бегун завязывает свои шнурки, следующие за ним участники могут его обогнать. Рассмотрим на примере. При N=5 изначальная линия бегунов выглядит так: 1 2 3 4 5. В процессе у участника с номером 2 развязываются шнурки. Пока он их завязывает, предположим, что двоим участникам удается его обогнать. Тогда порядок участников становится: 1 3 4 2 5. Если теперь у бегуна с номером 4 возникнут проблемы со шнурками, из-за чего он пропустит, например, одного человека вперед, то линия станет: 1 3 2 4 5. Вам дается N и порядок в котором бегуны финишировали. Вам необходимо узнать минимальное количество участников, у которых могли развязаться шнурки во время забега.
Формат входного файла
В первой строке находится одно целое число N(1<=N<=200000). Во второй строке находятся N целых чисел p1,p2,,pN(1<=pi<=N, pipj если ij) — первым финишировал бегун p1, вторым был p2, \dots, последним — pN.
Формат выходного файла
Выведите одно целое число — ответ на задачу.
Примеры:
Вход
6
1 2 5 4 3 6
Ответ
2
Вход
3
1 2 3
Ответ
0
Замечание
Разберем первый пример. Изначальная линия: 1 2 3 4 5 6. Один из возможных вариантов событий: Сначала развязался шнурок у бегуна с номером 4 и его обогнал 5-й. Линия стала равной 1 2 3 5 4 6. После этого развязался шнурок у бегуна с номером 3 и его обогнали бегуны 5 и 4. Линия стала равной 1 2 5 4 3 6. Можно показать, что если бы шнурки развязались у менее чем двух бегунов, тогда невозможно было бы получить нужный порядок. ( Temirlan Satylkhanov )
посмотреть в олимпиаде

Комментарий/решение:

  0
2 года 1 месяца назад #

Здравствуйте, я решил эту задачу на пайтоне, но как сменить компилятор?

  0
2 года 1 месяца назад #

показать/скрыть код

C++

  0
2 года 1 месяца назад #

обычная Динамика, расстояние Дамерау-Левенштейна

  0
2 года 1 месяца назад #

MaxSplit=int(input())

Sportsmen=[]

Sportsmen=input().split()

for i in range(len(Sportsmen)):

Sportsmen[i]=int(Sportsmen[i])

sum=0

for i in range(len(Sportsmen)):

if(Sportsmen[i]!=i+1):

#if(Sportsmen[i]<Sportsmen[i-1] or Sportsmen[i]>Sportsmen[i+1]):

sum+=1

print(sum)

  0
2 года назад #

#include <iostream>

#include <vector>

using namespace std;

int main() {

int n;

cin >> n;

vector<int> order(n);

for (int i = 0; i < n; i++) {

cin >> order[i];

}

int count = 0;

for (int i = 1; i < n; i++) {

if (order[i] < order[i-1]) {

count++;

}

}

cout << count << endl;

return 0;

}

  0
2 года назад #

n = int(input())

order = list(map(int, input().split()))

count = 0

for i in range(1, n):

if order[i] < order[i-1]:

count += 1

print(count)

  0
1 года 6 месяца назад #

#include<iostream>

using namespace std;

int main(){

int n,s=0,makx = 0, c;

cin>>n;

for(int i =0;i<n;i++){

cin>>c;

if(makx>c){

s++;

}

makx=max(c,makx);

}

cout<<s;

}