ІІ етап Всеукраїнської учнівської олімпіади з інформатики
для 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 ()
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.
Немає коментарів:
Дописати коментар