This version of the page http://www.olymp.vinnica.ua/i2006/rc.shtml (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2007-08-06. The original page over time could change.
Открытая Всеукаинская интернет-олимпиада по информатике NetOI-2006
  http://www.olymp.vinnica.ua
Всеукраинский центр проведения интернет-олимпиад
   


Финальный
Real-time тур

Официальные документы (укр)
Правила олимпиады NetOI-2006
NetOI-2006. Регистрация участников
Участники, выступающие в категории 'школьники Украины'
Все участники NetOI-2006
Тренировочный тур олимпиады NetOI-2006
Задания
1-го тура
( 13.10.06-28.10.06 )
Результаты 1-го тура -ШКОЛЬНИКИ УКРАИНЫ
Результаты 1-го тура -ОБЩИЙ ЗАЧЕТ
Задания
2-го тура ( 12.11.06-01.12.06 )
Результаты 2-го тура -ОБЩИЙ ЗАЧЕТ
Результаты 2-го тура -ШКОЛЬНИКИ УКРАИНЫ
Задания 3-го тура (16.12.06 - 05.01.07)
Результаты 3-го тура ШКОЛЬНИКИ УКРАИНЫ
Результаты 3-го тура ОБЩИЙ ЗАЧЕТ
Суммарные результаты (1-3 тур) - ОБЩИЙ ЗАЧЕТ
Суммарные результаты (1-3 тур) - ШКОЛЬНИКИ УКРАИНЫ
ШКОЛЬНИКИ УКРАИНЫ - участники 4-го (REAL-TIME) тура
REAL-TIME (4 тур)РЕЗУЛЬТАТЫ (ШКОЛЬНИКИ УКРАИНЫ)
ОКОНЧАТЕЛЬНЫЕ РЕЗУЛЬТАТЫ (ШКОЛЬНИКИ УКРАИНЫ)
Проверка
задач NetOI-2006 в режиме on-line
Отослать решение через веб-форму
Форум олимпиады NetOI-2006
Главная страница
     
Открытая Всеукаинская интернет-олимпиада по информатике NetOI-2006


Приложение C. Примеры задач и их решений.

Чтобы показать, как будут формулироваться задачи олимпиады и как должны быть сделаны решения, мы рассмотрим условия двух очень простых задач и их решения. Особое внимание обратите на ввод и вывод данных, здесь не допускается ни малейших отклонений.

Задача 1: "Максимум".

Код задачи: Maximum
Условие:

Многие проповедники, психологи и политики называют состояние нашей экономики периодом накопления начального капитала. В этих условиях чрезвычайно актуальна следующая задача:

Дана последовательность из N целых чисел: a1, a2, ..., aN. Требуется найти наибольшее число, содержащееся в этой последовательности.

Ограничения: 1 < N < 1000; -1000 <= aK <= 1000, K=1,2,..,N.
Ввод / вывод:

Первая строка ввода содержит число N. Во второй строке содержится N чисел: a1, a2, ..., aN. Вывод должен состоять из одного числа, максимального числа в данной последовательности.
Пример:

input> 5
input> 12 64 -10 88 13
output< 88

Строка "input>" отмечает строку, которая подается на стандартный ввод, а "output<" отмечает вывод программы. Сами строки "input>" и "output<" не должны вводиться или выводиться.
Конец задачи 1.

Решение этой задачи на Pascal-е:
 
Program Maximum;
   Const
   MaxN = 999; { Максимальное число элементов.}
Var
   N: Integer; {Число элементов в последовательности.}
   A: array[1..MaxN] of Integer; { Сама последовательность. }
   X: Integer;  { Требуемое число. }
   K: Integer;
BEGIN
       { Ввод данных. }
   Read(N);
   for K := 1 to N do	
     Read(A[K]);
   X := A[1];
   for K := 2 to N do
    if A[K] > X then
	X := A[K];
     { Вывод результата. }
    WriteLn(X);
END.
Решение этой задачи на C:

   
 /* Maximum */

#include <stdio.h>

#define MaxN 999 
 /* Максимальное число элементов. *// 

int N; 
/* Число элементов в последовательности. *// 
int A[MaxN];
  /* Сама последовательность. *// 
int X; /* Требуемое число. */

int main(void)
{
    int K;
/* Ввод данных. */
    int K;
    scanf("%d", &N);
        for (K = 0; K < N; K++)
            scanf("%d", &A[K]);
/* Решение задачи. */

    X = A[0];
    for (K = 1; K < N; K++)
        if (A[K] > X)
            X = A[K];

    /* Вывод результата. */
    printf("%d\n", X); 

    return 0;
}

Еще одна задача:

Задача 2: "Яблочная игра".

Код задачи: Apples
Условие:
Продолжая тему, затронутую в предыдущей задаче, предложим следующую занимательную игру. На большом дубовом столе лежит несколько яблок. Два игрока по очереди съедают по яблоку до тех пор, пока все яблоки не будут съедены. Игроки стремятся съесть как можно больше яблочной массы. Составьте программу, которая играет в эту игру.
Ограничения: 1 < N < 100, где N -- число яблок на дубовом столе.
0 < bK < 1000, K=1,2,..,N, где bK -- масса K-го яблока (в граммах). bK -- целое число.
Ввод / вывод:
Сперва Ваша программа должна прочитать с первой строки число N, и со второй -- N чисел b1, b2, ..., bN. Затем она должна вывести число 1, если она хочет начинать первой, или 2, если хочет быть вторым игроком. Далее, пока остаются яблоки, программа должна либо вывести номер яблока, которое она хочет съесть, либо прочитать номер яблока, которое съел соперник. По завершении игры, программа должна вывести два числа: сколько грамм яблок съела она и ее соперник.
Пример:
input> 4
input> 120 330 470 70
output< 1
output< 3
input> 2
output< 1
input> 4
output< 590 400
Строка "input>" отмечает строку, которая подается на стандартный ввод, а "output<" отмечает вывод программы. Сами строки "input>" и "output<" не должны вводиться или <выводиться.
Конец задачи 2.

Решение на Pascal-е:
    

Program Apples;
  Const
   MaxN = 999; { Максимальное число яблок. }
  Var
   N : Integer; { Число яблок на дубовом столе. }
   B : array[1..MaxN] of Integer; { Масса каждого яблока. }
   Eaten: array[1..MaxN] of Boolean; { Съедено ли аблоко. }
   Remain: Integer;  Сколько осталось яблок на столе. }
   MyMove: Boolean; { Чей ход? }
   MyApples, HisApples: Integer; { Сколько кто съел. }
   X, I, K: Integer;
  BEGIN
     {Ввод данных о яблоках}
   Read(N);
     for K := 1 to N do
       Read(B[K]);

    { Мы будем ходить первыми.}
     MyMove := true;
     WriteLn(1);
     { Сама игра. }
     for K := 1 to N do
       Eaten[K] := false;
     MyApples := 0;
     HisApples := 0;
      for Remain := N downto 1 do
       if MyMove then
	          begin
	            { Наш ход. }
                    I := 0; X := 0;
 		     for K := 1 to N do
		       if (B[K] > X) and (not Eaten[K]) then
		         begin
		          I := K; X := B[K];
		         end;
		    MyApples := MyApples + X;
	            Eaten[I] := true;
		    MyMove := false;
		    Writeln(I);
	          end
	         else
	          begin
	           { Ход соперника. }
		   Read(I);
		   HisApples := HisApples + B[I];
		   Eaten[I] := true;
		   MyMove := true;
		 end;
	 { Вывод результатов. }
      WriteLn(MyApples, ' ', HisApples);
  END.

Оглавление



© Всеукраинский виртуальный центр олимпиад школьников "ОЛІМП"