!!Часовник

Како решение на ова задача се бараше програма која од стандарден влез ќе прочита еден цел број N - кој означува број на изминати часови, и на стандарден излез ќе отпечати колку полни завртувања ќе направи малата стрелка на еден часовник за тој период.

Јасно е дека во период од N часови малата стрелка на часовникот (онаа која покажува колку е часот) ќе направи N/12 завртувања (размислете кога - во кој период - преоѓаме во 1 полно завртување, 2 полни завртувања, итн). Бидејќи се бараше да се отпечати колку полни завртувања ќе направи стрелката, го печатиме резултатот од целобројното делење на N со 12 (најголемиот цел број помал или еднаков на N/12). Следи изворниот код на официјалното решение:

!C++
%%prettify 
{{{
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    
    cout << (n/12) << endl;
    return 0;
}
}}}
/%
 
!Паскал                  
%%prettify 
{{{
program casovnik;        (*Mario Talevski*)   

var h:integer;

begin

   readln(h);
   writeln(h div 12);
   
end.  
}}}
/%

Решенијата дадени погоре имаат сложеност O(1).

!!Точка

Во оваа задача се бараше да напишеме програма која од стандарден влез ќе ги прочита координатите на долното лево теме на еден правоаголник, должините на неговите страни и координатите на произволна точка t од рамнината, и на стандарден излез (екран) ќе отпечати "strana" (само за основна и напредна група), "vnatre" или "nadvor" во зависност од тоа каде се наоѓа точката t во однос на правоаголникот.

Задачата се решава со едноставна употреба на if наредбата - притоа можеме да разгледуваме дали точката се наоѓа или не во правоаголникот, а потоа во else да наведеме што треба програмата да отпечати доколку условот не е исполнет. Следи изворниот код на решението на задачата (само за основна и напредна група; за почетничка група има еден услов помалку):

!C++
%%prettify 
{{{
#include <iostream>
using namespace std;

int main()
{
    int px, py;
    cin >> px >> py;
    
    int a, b;
    cin >> a >> b;
    
    int x, y;
    cin >> x >> y;
    
    if ((x>=px && x<=px+a) && (y>=py && y<=py+b))       
    {
               if (x==px||x==px+a||y==py||y==py+b)               
                  cout << "strana" << endl;
               else
                   cout << "vnatre" << endl;                   
    } else
    {
          cout << "nadvor" << endl;    
    }
    
    return 0;
}

}}}
/%
!Паскал
%%prettify 
{{{
program tocka;        (*Mario Talevski*)

var px,py,a,b,tx,ty,x,y:integer;

begin

   readln(px,py,a,b,x,y);

   if (((x>=px) and (x<=px+a)) and ((y>=py) and (y<=py+b)))  then

     begin

        if ((x=px) or (x=px+a) or (y=py) or (y=py+b))   then

            begin
               writeln('strana')
            end

          else

            begin
               writeln('vnatre');
            end;
      end

          else
  
            begin
               writeln('nadvor');
            end;

end.
}}}
/%

И овие решенија имаат сложеност O(1).

!!Квадрат

Како решение на оваа задача се бараше програма која ќе открие кој број недостасува во магичен квадрат (квадрат кој содржи n%%sup 2/% цели броеви, така што збирот на броевите во секој ред, колона и двете дијагонали е еднаков).

Прво нешто што треба да забележиме од текстот на задачата е дека, во матрицата која го претставува квадратот, збирот во сите редови (колони, дијагонали) е еднаков, освен во оној ред каде што недостасува еден од броевите. Бидејќи редот на магичниот квадрат беше поголем или еднаков на 2, секогаш ќе можеме да го откриеме збирот кој треба да важи и за редот во кој недостасува еден од броевите (бидејќи во магичен квадрат сите редови имаат ист збир). Потоа, задачата се сведува на откривање во кој ред се наоѓа бројот кој недостасува, одбирање на било кој друг ред (секогаш постои таков), сумирање на броевите во двата реда и со едноставни математички операции (решавање на линеарна равенка со една непозната) откривање кој број недостасува. Следува изворниот код на официјалното решение:

!C++
%%prettify 
{{{
#include <iostream>
using namespace std;

int main()
{
    int badRow = -1;
    int n, mij[10][10];
    
    cin >> n;
    
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
        {
            cin >> mij[i][j];
            
            if (mij[i][j] == -1)
               badRow = i;
        }
        
    int okRow = 0;        
    if (badRow == 0)
       okRow = badRow+1;    
       
    int sumBadRow = 0, sumOkRow = 0;
    
    for (int j=0; j<n; j++) //columns
    {
        sumBadRow += mij[badRow][j];
        sumOkRow += mij[okRow][j];
    }
    
    cout << (sumOkRow - sumBadRow - 1) << endl;
    return 0;
}
}}}
/%

Ова решение има сложеност O(N%%sup 2/%).

!!Тест случаи
Тест случаите можете да ги симнете како .zip архива [тука|Прв електронски натпревар 2011/testovi_prv_elektronski_2011.zip]. \\
Текстот и решенијата дадени погоре можете слободно да ги коментирате на форумот.