Задача 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;
}