Областная олимпиада по информатике 2020 год, 9-11 классы


Задача B. Перестановка

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

Постройте пилообразную циклическую перестановку $p$ длины $n$. Перестановка называется циклической тогда и только тогда, когда она состоит из единственного цикла.(То есть в графе с ребрами $i$ - $p_i$ ровно одна связанная компонента). Пилообразная перестановка - перестановка $p$, такая что её члены по очереди возрастают и убывают.($p_1 < p_2 > p_3 < p_4 ...$ или $p_1 > p_2 < p_3 > p_4 ...$)
Формат входного файла
Вам дано одно целое число $n$.
Формат выходного файла
Выведите любую подходящую перестановку.
Система оценки
Данная задача содержит ровно $10$ тестов и каждый оценивается в $10$ баллов.
  1. $n = 4$
  2. $n = 5$
  3. $n = 10$
  4. $n = 11$
  5. $n = 20$
  6. $n = 21$
  7. $n = 2019$
  8. $n = 2020$
  9. $n = 12345$
  10. $n = 123456$
Пример:
Вход
4
Ответ
3 1 4 2 
( Batyr Sardarbekov )
посмотреть в олимпиаде

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

пред. Правка 2   0
2020-01-13 13:52:42.0 #

пред. Правка 5   7
2020-01-13 13:52:30.0 #

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

  0
2020-01-14 18:13:17.0 #

не могу понять почему неправильно, объясните если не прав

#include <iostream>

using namespace std;

int main() {

int n;

cin>>n;

int a[n+1];

a[1] = 1;

a[2] = 3;

a[3] = 2;

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

if(i%2==0){

a[i] = i;

}else {

a[i] = i-1;

a[i-1] = i;

}

}

cout<<a[1];

for(int i=2; i<=n; i++) cout<<" "<<a[i];

return 0;

}

  1
2020-07-28 15:39:27.0 #

jilnash(походу твой ответ должен совпадать с ответом теста) :/

  0
2020-11-16 17:55:01.0 #

Последовательность получается не циклической, потому что вершина 1 становится отдельной компонентой потому что ребро ведет само в себя

  13
2021-02-23 00:12:11.0 #

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

  0
2022-02-24 06:22:10.0 #

Не правильно выводит после 5

  1
2021-03-13 16:12:13.0 #

почему не проходит 3 тест

#include <iostream>

using namespace std;

int main() {

int n;

cin >> n;

int p = n / 2 + 1;

for (int i = 1; i <= n / 2; i++, p++)

cout << p << " " << i << " ";

if(n % 2 != 0) cout << p;

return 0;

}

  9
2021-05-15 04:52:36.0 #

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

  0
2021-12-02 11:49:59.0 #

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

  0
2021-12-06 14:42:32.0 #

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

  0
2021-12-06 14:42:36.0 #

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

  0
2021-12-16 15:40:01.0 #

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

  0
2022-03-10 12:06:14.0 #

#include<bits/stdc++.h>

using namespace std;

int main()

{

int n,a=5,b=2;

cin>>n;

if(n==1)

{

cout<<1;

}

else if(n==2)

{

cout<<2<<" "<<1;

}

else if(n==3)

{

cout<<3<<" "<<1<<" "<<2;

}

else if(n==4)

{

cout<<3<<" "<<1<<" "<<4<<" "<<2<<" ";

}

else if(n>4)

{

cout<<3<<" "<<1<<" "<<5<<" "<<2<<" ";

}

for(int i=1;i<=n/2-2;i++)

{

if(a+2<=n)

{

a+=2;

b+=2;

cout<<a<<" "<<b<<" ";

}

else

{

a+=1;

b+=2;

cout<<a<<" "<<b<<" ";

}

}

if(n>4 && n%2==1)

{

cout<<b+2;

}

return 0;

}

  1
2022-03-10 12:08:07.0 #

#include<bits/stdc++.h>

using namespace std;

int a[123457];

int main()

{

int n;

cin>>n;

if(n%2==0)

{

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

{

if(i+2<=n)

{

a[i]=i+2;

}

else

{

a[i]=i+1;

}

}

for(int i=n;i>0;i-=2)

{

if(i-2>0)

{

a[i]=i-2;

}

else

{

a[i]=i-1;

}

}

}

else

{

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

{

if(i+2<=n)

{

a[i]=i+2;

}

else

{

a[i]=i+1;

}

}

for(int i=n-1;i>1;i-=2)

{

if(i-2>0)

{

a[i]=i-2;

}

else

{

a[i]=i-1;

}

a[n]=n-1;

a[2]=1;

}

}

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

{

cout<<a[i]<<" ";

}

return 0;

}