This version of the page http://www.olymp.vinnica.ua/i2005/rc_u.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-2030
  http://www.olymp.vinnica.ua
Всеукраїнський центр проведення інтернет-олімпіад
   



4-й Real-time тур
Офiцiйнi документи
Правила олімпіади NetOI-2005
Тренувальний тур олімпіади NetOI-2005
Завдання 1-го туру
(2.11.05-18.11.05)
Результати 1-го туру - ШКОЛЯРІ УКРАЇНИ
Результати 1-го туру - ЗАГАЛЬНИЙ ЗАЛІК
Завдання
2-го туру(2.12.05-19.12.05)
Результати 2-го туру - ШКОЛЯРІ УКРАЇНИ
Результати 2-го туру - ЗАГАЛЬНИЙ ЗАЛІК
Завдання 3-го туру (03.01.06 - 18.01.06)
--> Результати 3-го туру - ШКОЛЯРІ УКРАЇНИ
Результати 3-го туру - ЗАГАЛЬНИЙ ЗАЛІК
Результати за 3 тури
ШКОЛЯРІ УКРАЇНИ - учасники 4-го (REAL-TIME) туру
REAL-TIME (4 тур)РЕЗУЛЬТАТИ ЗАГАЛЬНИЙ ЗАЛІК
REAL-TIME (4 тур)РЕЗУЛЬТАТЫ (ШКОЛЯРІ УКРАЇНИ)
ОСТАТОЧНІ РЕЗУЛЬТАТИ (ШКОЛЯРІ УКРАЇНИ)
Перевірка
задач NetOI-2005 в режимі on-line
Прийом розв'язків NetOI-2005 через веб-форму
NetOI-2005. Реєстрація учасників
Учасники NetOI-2005 ШКОЛЯРІ УКРАЇНИ)
Всі учасники NetOI-2005
Форум олімпіади NetOI-2005
Повний ftp - архів олімпіади
Головна сторінка
     
NetOI-2005


Додаток C. Приклади задач та їхніх рішень.

Щоб показати, як будуть формулюватися задачі олімпіади і як повинні бути зроблені рішення, ми розглянемо умови двох дуже простих задач і їхні рішення. Особливу увагу зверніть на введення і вивід даних, тут не допускається ні найменших відхилень.

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

Код задачі: Maximum
Умова:

Багато проповідників, психологи і політики називають стан нашої економіки періодом накопичення початкового капіталу. У цих умовах надзвичайно актуальна така задача:

Дана послідовність із N цілих чисел: a1, a2, ... , a. Потрібно знайти найбільше число, що міститься в цій послідовності.

Обмеження: 1 < N < 1000; -1000 <= a <= 1000, K=1,2,..,N.
Введення / вивід:

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

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

Рядок "input>" відзначає рядок, що подається на стандартне введення, а "output<" відзначає вивід програми. Самі рядки "input>" і "output<" не повинні вводитися або виводитися.
Кінець задачі 1.

Рішення цієї задачі на Pascal-е:
 
 Program Maximum;
   Const
   Max = 999; { Максимальне число елементів. }
 Var
   N: Integer; {Число елементів у послідовності. }
   A: array[1..Max] 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 

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

int N; 
/* Число елементів у послідовності. *// 
int A[Max];
   /* Сама послідовність. *// 
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 < b < 1000, K=1,2,..,N, де b -- маса K-го яблука (у грамах). b -- ціле число.
Введення / вивід:
Спочатку Ваша програма повинна прочитати з першого рядка число N, і з другого -- N чисел b1, b2, ... , b. Потім вона повинна вивести число 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
   Max = 999; { Максимальне число яблук. }
  Var
   N : Integer; { Число яблук на дубовому столі. }
   B : array[1..Max] of Integer; { Маса кожного яблука. }
   Eaten: array[1..Max] 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.
 
 

Зміст