Задача A автор Шумейко Максим
#include <iostream>

#include <string>

#include <cstdio>

using namespace std;

struct mas

{

    char b[5][5];
};

mas t;

int k=100;

bool w=false;

void vverh(int l)

{

     for (int ii=1;ii<=3;ii++) t.b[ii-1][l]=t.b[ii][l];
        t.b[3][l]=t.b[0][l];
}

void vnyz(int l)

{

        for (int ii=3;ii>=1;ii--) t.b[ii+1][l]=t.b[ii][l];
        t.b[1][l]=t.b[4][l];
}

void vlivo(int l)

{

        for (int ii=1;ii<=3;ii++) t.b[l][ii-1]=t.b[l][ii];
        t.b[l][3]=t.b[l][0];
}

void vpravo(int l)

{

        for (int ii=3;ii>=1;ii--) t.b[l][ii+1]=t.b[l][ii];
        t.b[l][1]=t.b[l][4];
}


void kr(int x, mas a)

{

 if (x>5) return;
 bool fl=true;
 for (int i=1;i<=3;i++)
  for (int j=1;j<=3;j++)
   if (a.b[i][j]!=a.b[i][1])fl=false;
 if (fl)
  {
      k=min(k,x);return;
  }
 fl=true;
 for (int j=1;j<=3;j++)
  for (int i=1;i<=3;i++)
   if (a.b[i][j]!=a.b[1][j])fl=false;
 if (fl)
 {
     k=min(k,x);return;
 }
  for (int i=1;i<=3;i++)
 {
     for (int j=1;j<=3;j++)
      for (int jj=1;jj<=3;jj++)t.b[j][jj]=a.b[j][jj];
     vverh(i);kr(x+1,t);
     for (int j=1;j<=3;j++)
      for (int jj=1;jj<=3;jj++)t.b[j][jj]=a.b[j][jj];
     vnyz(i);kr(x+1,t);
     for (int j=1;j<=3;j++)
      for (int jj=1;jj<=3;jj++)t.b[j][jj]=a.b[j][jj];
     vlivo(i);kr(x+1,t);
     for (int j=1;j<=3;j++)
      for (int jj=1;jj<=3;jj++)t.b[j][jj]=a.b[j][jj];
     vpravo(i);kr(x+1,t);
 }
}

int main()

{

    mas s;
    for(int i=1;i<=3;i++) for (int j=1;j<=3;j++) cin>>s.b[i][j];
    kr(0,s);
    cout<<k;
    return 0;
}


Задача B автор Сорока Дмитро
var x,y:array[1..2000]of longint;

    kol:array[-111..111,-111..111]of LongInt;
    n,i,j,k,ans,s,a,b,c,xa,ya,m:longint;
begin
 FillChar(kol,SizeOf(kol),0);
 ans:=0;
 read(n);
 m:=0;
 for i:=1 to n do
  begin
   read(xa,ya);
   if kol[xa,ya]=0 then begin Inc(m);x[m]:=xa;y[m]:=ya;kol[xa,ya]:=1; end
   else inc(kol[xa,ya]);
  end;
 n:=m;
 if n=1 then ans:=kol[x[1],y[1]];
 for i:=1 to n-1 do
  for j:=i+1 to n do
   begin
    a:=y[i]-y[j];
    b:=x[j]-x[i];
    c:=x[i]*y[j]-x[j]*y[i];
    s:=kol[x[i],y[i]]+kol[x[j],y[j]];
    for k:=1 to n do
     if (a*x[k]+b*y[k]+c=0)and(k<>i)and(k<>j) then s:=s+kol[x[k],y[k]];
    if s>ans then ans:=s;
   end;
 write(ans);
end.


Залача C автор Грубіян Євген
#include <iostream>

#include <string>

#include <sstream>

#include <vector>

using namespace std;
int main()
{

    string name; int n; string m,f; int r=0; string t_;
    getline(cin, name);
    getline(cin, t_);
    stringstream s_(t_);
    s_>>n;
    string t[n]; vector<string> rel[n]; int c[n]; int f_str=-1, m_str=-1;
    for (int i=0; i<n; i++)
    {
        c[i]=0;
        string buf;
        getline(cin, t[i]);
        stringstream s(t[i]);
        while (s >> buf) { rel[i].push_back(buf); if ((name==buf) && (c[i]>1)) { f=rel[i][0]; m=rel[i][1]; } c[i]++; }
    }
    for (int i=0; i<n; i++)
        for (int j=2; j<c[i]; j++)
             if (f==rel[i][j]) f_str=i; else if (m==rel[i][j]) m_str=i;
        if (f_str!=-1)
                for (int i=2; i<c[f_str]; i++)
                        for (int j=0; j<n; j++) if (((rel[f_str][i]==rel[j][0]) || (rel[f_str][i]==rel[j][1])) && (rel[f_str][i]!=f)) { r+=(c[j]-2); /*cout<<i<<" ";*/ break; }
        if (m_str!=-1)
                for (int i=2; i<c[m_str]; i++)
                        for (int j=0; j<n; j++) if (((rel[m_str][i]==rel[j][1]) || (rel[m_str][i]==rel[j][0])) && (rel[m_str][i]!=m)) { r+=(c[j]-2); /*cout<<i<<" ";*/ break; }
    cout <<r;
    return 0;
}