субота, 14 грудня 2019 р.

Олімпіада програмування 2019 р (районий тур)


ІІ етап Всеукраїнської учнівської олімпіади з інформатики

для 8-11 класів у 2019році

З а в д а н н я

(Час виконання -3 год.)

Задача 1. Феноменальна пам’ять (20 б.)

Одного разу Сашко проходив повз своїх молодших братиків, які грали в комп’ютерну гру на розвиток памяті і здивувався, чому Дмитрик моментально розкладав у рядку картки з цифрами у вірному порядку, як би багато їх не було. За правилам гри  хлопцям спочатку на хвилину демонструвався рядок з числами, потім їх перемішували й гравці повинні були наввипередки розмістити числа в початковому порядку (тобто як було до перемішування). Трохи постоявши біля малюків, Сашко зрозумів у чому секрет феноменальної пам’яті Дмитрика. Усе було дуже просто: мінялися місцями тільки сусідні картки к1 з к2, к3 з к4 і так далі. Сашко зрадів кмітливості одного з братиків і вирішив, що він теж може написати програмний код схожої гри. Допоможіть Сашкові написати програму. Картки містили тільки цілі числа (кі за модулем, менші 100)

Вхідні дані: Перший рядок вхідного файлу input.txt містить  число N (1 ≤ N≤ 10000)  - кількість елементів у рядку, який на початку демонструють гравцям.

У другому рядку через пробіл – числа к1, к2,…

Вихідні дані: Один рядок вихідного файлу output.txtвивід зміненого рядка

Приклад

input.txt
output.txt
1
6
5 7 4 9 -1 2
7 5 9 4 2 -1
2
7
1 2 3 12 5 60 8
2 1 12 3 60 5 8



Задача 2. Танок світлячків (30 б.)

На новорічні свята до Попелюшки завітали її найкращі друзі світлячки й замість того щоб їй допомагати перебирати просо, почали її розважати й  весело танцювати. Танцювали вони по колу, яскраво виблискуючи своїми святковими ліхтариками. На колі було позначено N маленьких позначок з номерами від 0 до N-1 за годинковою стрілкою, й на них приземлилися М світлячків. Спочатку на позначці міг розміщуватися тільки один світлячок (декілька на одній позиції не розміщувалися). Потім кожен з них одночасно починав танцювати у своєму напрямку й на одній позначці могло бути й декілька світлячків. Вам потрібно визначити де будуть знаходитися світлячки через Т секунд свого танцю. Відстані між сусідніми позначками однакові. За одну секунду світлячок протанцьовує відстань рівну відстані між сусідніми позначками на колі.

Вхідні дані: У першому рядку через пробіл – цілі числа N, M, T (1 ≤ N≤ 109,

1 ≤ М≤ 105, 1 ≤ Т≤ 109).

Наступні рядки через пробіл–  це позиція розміщення світлячка (х від 0 до N-1) й напрямок танцю (у=1-за годинною стрілкою, у=-1-проти годинної стрілки).

Вихідні дані: перший рядок через пробіл - М цілих чисел, позиції світлячків через Т секунд; другий рядок – відсортовані за зростанням позиції світлячків.



Приклад вхідних та вихідних даних.

Вхідні
Вихідні
Input2.txt
Output2.txt
5 2 1
2 1
3 -1
3 2
2 3




Задача 3. Гра в кубики (60 б.)

Двоє гравців кидають n  (n<100) кубиків. На кожній грані кубика написане число від 1 до 6. Числа на гранях різні. Ходячи по черзі гравці перевертають один з кубиків на сусідню грань, так щоб отримане число на верхній грані було більше за попереднє на верхній грані. Програв той, хто не зміг цього зробити. Ви ходите першим і граєте з суперником, який не помиляється. У заданій ситуації зробіть будь-який виграшний хід, або здайтеся. Сума очок на протилежних гранях кубика дорівнює 7.



Вхідні дані

У першому рядку – натуральне число N<100 – кількість кубиків.

У другому рядку через пробіл n чисел на верхніх гранях кубиків.

Вихідні дані:один рядок через пробіл два числа – число на верхній грані й більше число на грані, яку повернули до верху (у разі виграшної ситуації);

У рядку  - 0, якщо програшна ситуація.

Приклад вводу й виводу даних

Вхідні
Вихідні
Input3.txt
Output3.txt
3
1 4 1
4 6



Успішного виконання!
задача1
f= open ('input.txt','r')
S=''
for i in f:
    S+=i
# a = list(map())
#print(f.readline().strip(" "))
print (S)
print (len(S))
n=int(S[0])
print (n)
n1=len (S)
s=''
for i in range (2,n1,2):
    s+=S[i]
print (s)
s1=''
if n%2==0:
    for i in range (0,n,2):
        s1=s1+s[i+1]+s[i]
else:
    for i in range (0,n-1,2):
        s1=s1+s[i+1]+s[i]
    s1+=s[n-1]
print (s1)
f.close ()
f1=open ('output.txt','w')
f1.write (s1)
f1.close ()

Задача 1

var

f,f1 :text;
A : array [1..10000] of integer;
N,i,P : integer;
begin
Assign (f,'input.txt');
Reset (f);
read (f,N);
for I:=1 to N do
  read (f,A[i]);
close (f);
I:=1;
While (I<=N-1)do
  begin
   P:=A[i];
   A[i]:=A[I+1];
   A[I+1]:=P;
   I:=I+2;
  end;

Assign (f1,'output.txt');
Rewrite (f1);
for I:=1 to n do
  write (f1,A[i],' ');
close (f1);
end.
Задача1 (просто)
var
f,f1 :text;
N,i,P,A,B : integer;
begin
Assign (f,'input.txt');
Reset (f);
Assign (f1,'output.txt');
Rewrite (f1);
read (f,N);
for I:=1 to (N div 2) do
  begin
    read (f,A);
    read (f,B);
    Write (f1,B,' ');
    Write (f1,A,' ');
  end;
if (N mod 2)=1 then begin
      read(f,P);
      Write (f1,P);
     end;
close (f);
close (f1);
end.



Задача2
var
f,f1 :text;
A,B,C : array [1..10000] of integer;
N,M,T,i,P,J : integer;
begin
Assign (f,'input.txt');
Reset (f);
read (f,N,M,T);
for I:=1 to M do
  read (f,A[i],B[i]);
close (f);
P:=T mod N;
For I:=1 to M do
 if (B[i]=1) then
  begin
    C[I]:= A[i]+P;
    C[I]:=C[I] mod N;
  end else if (B[i]=-1)then
   begin
    C[I]:= A[i]-P;
    if C[i]<0 then C[i]:=N+C[i] ;
   end;
Assign (f1,'output.txt');
Rewrite (f1);
for I:=1 to M do
  write (f1,C[i],' ');
for I:=1 to M-1 do// сортировка
  for J:=I+1 to M do
    if C[i]>C[j] then
      begin
        P:=C[I];
        C[I]:=C[j];
        C[j]:=P;
      end;
Writeln(f1);  //Перенос на новую строку
for I:=1 to M do
  write (f1,C[i],' ');
close (f1);
end.

Задача3

var
A, B : array [1..100] of integer;
i,j,N,S : integer;
f,f1: text;
begin
Assign (f,'input.txt');
reset (f);
read (f,N);
for i:=1 to N do
  read (f,A[i]);
close (f);
S:=0;
for i:=1 to N do
  if A[i]=1 then B[i]:=2 else
    if A[i]=6 then B[i]:=0 else B[i]:=1;
{кубик с 1 - 2 хода; кубик с 6 - 0 ходов; все остальные по 1 ходу }   
 
for i:=1 to N do
  S:=S+B[i];
// определяем количество ходов
Assign (f1,'output.txt');
Rewrite (f1);
// чотное количество ходов проиграш
if (S mod 2) = 0  then Write (f1,0) else
  for i:=1 to N do
   if B[i]=1 then begin
    Write (f1,A[i],' ',6);
    break;
    end;
// выигрывает ток кубик, который переворачиваем первый на 6 (там где можно сделать только один ход)
Close (f1);   
end.



Немає коментарів:

Дописати коментар