Як розшифровується речення Якщо зайдеш на серче, то знайдеш багато нубів. Вони часто влаштовують там лінкомийкую. Офтоп та флуд притаманні кожному нубу, який бездумно жме батони та топче кебарду. На них чатують справжні кібер-бики.
// PascalABC.Net 3.0, сборка 1052 function kn(a,b,c:integer):byte; { функция возвращает количество отрицательных среди a,b,c} var n:byte; begin if a<0 then n:=1 else n:=0; if b<0 then Inc(n); if c<0 then Inc(n); kn:=n end;
function cond(c:char;v:integer):string; { функция формирует строку вида с>0 или c<0 в зависимости от знака v} begin if v<0 then cond:=c+'<0 ' else cond:=c+'>=0' end;
procedure pv(a,b,c:integer; n:byte); { печать строки теста } var m:byte; begin m:=kn(a,b,c); Write(cond('a',a),' ',cond('b',b),' ',cond('c',c),' '); Write('отрицательных ',m); if n=m then Write(' - тест тестовое: ',n); Writeln end;
{ тестовое решение } const T:array[1..8,1..3] of integer=((1,1,1),(1,1,-1),(1,-1,1), (1,-1,-1),(-1,1,1),(-1,1,-1),(-1,-1,1),(-1,-1,-1)); R:array[1..8] of byte=(0,1,1,2,1,2,2,3); var i:byte; begin for i:=1 to 8 do pv(T[i,1],T[i,2],T[i,3],R[i]) end.
Тестирование: a>=0 b>=0 c>=0 отрицательных 0 - тест a>=0 b>=0 c<0 отрицательных 1 - тест a>=0 b<0 c>=0 отрицательных 1 - тест a>=0 b<0 c<0 отрицательных 2 - тест a<0 b>=0 c>=0 отрицательных 1 - тест a<0 b>=0 c<0 отрицательных 2 - тест a<0 b<0 c>=0 отрицательных 2 - тест a<0 b<0 c<0 отрицательных 3 - тест
#define maxsize 105
typedef struct station{
int x, y, z;
} station;
int abs(int x){
return x >= 0 ? x : -x;
}
int min(int a, int b){
return a <= b ? a : b;
}
int main(){
FILE *ist, *ost;
station s[maxsize];
int w[maxsize][maxsize];
int inc[maxsize];
int n,i,j,k,m,l,r;
ist = fopen("input.txt","r");
fscanf(ist, "%d", &n);
for(i = 0; i < n; i++) fscanf(ist, "%d %d %d", &s[i].x, &s[i].y, &s[i].z);
fclose(ist);
for(i = 0; i < n; i++) inc[i] = 0;
for(i = 0; i < n; i++)
for(j = i; j < n; j++)
w[i][j] = w[j][i] = min(abs(s[i].x - s[j].x), min(abs(s[i].y - s[j].y), abs(s[i].z - s[j].z)) );
r = 0; k = 1;
inc[0] = 1;
while(k < n){
m = -1;
for(i = 0; i < n; i++) if(inc[i])
for(j = 0; j < n; j++) if(!inc[j])
if (m == -1 || w[i][j] < m) m = w[i][j], l = j;
r += m;
inc[l] = 1;
k++;
}
ost = fopen("output.txt","w");
fprintf(ost,"%d", r);
fclose(ost);
return 0;
}
function kn(a,b,c:integer):byte;
{ функция возвращает количество отрицательных среди a,b,c}
var
n:byte;
begin
if a<0 then n:=1 else n:=0;
if b<0 then Inc(n);
if c<0 then Inc(n);
kn:=n
end;
function cond(c:char;v:integer):string;
{ функция формирует строку вида с>0 или c<0 в зависимости от знака v}
begin
if v<0 then cond:=c+'<0 ' else cond:=c+'>=0'
end;
procedure pv(a,b,c:integer; n:byte);
{ печать строки теста }
var
m:byte;
begin
m:=kn(a,b,c);
Write(cond('a',a),' ',cond('b',b),' ',cond('c',c),' ');
Write('отрицательных ',m);
if n=m then Write(' - тест тестовое: ',n);
Writeln
end;
{ тестовое решение }
const
T:array[1..8,1..3] of integer=((1,1,1),(1,1,-1),(1,-1,1),
(1,-1,-1),(-1,1,1),(-1,1,-1),(-1,-1,1),(-1,-1,-1));
R:array[1..8] of byte=(0,1,1,2,1,2,2,3);
var
i:byte;
begin
for i:=1 to 8 do pv(T[i,1],T[i,2],T[i,3],R[i])
end.
Тестирование:
a>=0 b>=0 c>=0 отрицательных 0 - тест
a>=0 b>=0 c<0 отрицательных 1 - тест
a>=0 b<0 c>=0 отрицательных 1 - тест
a>=0 b<0 c<0 отрицательных 2 - тест
a<0 b>=0 c>=0 отрицательных 1 - тест
a<0 b>=0 c<0 отрицательных 2 - тест
a<0 b<0 c>=0 отрицательных 2 - тест
a<0 b<0 c<0 отрицательных 3 - тест