Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
fpc-src / usr / share / fpcsrc / 3.0.0 / tests / webtbs / tw5086.pp
Size: Mime:
{
TASK:water
LANG:PASCAL
}
program water;

const
	MAXV					= 200;

type
	Byte					= Integer;
	TMove					= record
		a, b, c				: Byte;
	end;

var
	used					: Array [0 .. MAXV, 0 .. MAXV, 0 .. MAXV] of Boolean;
	v, k, a1, a2, b1, b2, c1, c2		: Byte;
	answ					: LongInt;

procedure readInput;
begin
        assign(input,'tw5086.tmp');
        reset(input);
	readln(v, k);
	readln(a1, a2, b1, b2, c1, c2);
  close(input);
  erase(input);
end;

procedure dfs(a, b, c, k1: Byte);
var
	x					: Byte;
	d					: Array [1 .. 100] of TMove;
	dn, i					: Byte;

procedure add(a, b, c: Byte);
var
	i					: Integer;
	fnd					: Boolean;
begin
	fnd := False;
	for i := 1 to dn do
		if (d[i].a = a) and (d[i].b = b) and (d[i].c = c) then begin
			fnd := True;
			break;
		end;
	if (not fnd) then begin
		dn := dn + 1;
		d[dn].a := a; d[dn].b := b; d[dn].c := c;
	end;
end;

begin
	if (k1 > k) then Exit;
	if (a = 1) or (b = 1) or (c = 1) then begin
		answ := answ + 1;
		Exit;
	end;
	used[a, b, c] := True;
	dn := 0;
	if (a > 0) then begin
		if (b+a <= v) and (not used[0, b+a, c]) then
			add(0, b+a, c);
		if (c+a <= v) and (not used[0, b, c+a]) then
			add(0, b, c+a);
		if (a-a1 > 0) then begin
			x := a-a1;
			if (b+x <= v) and (not used[a1, b+x, c]) then
				add(a1, b+x, c);
			if (c+x <= v) and (not used[a1, b, c+x]) then
				add(a1, b, c+x);
		end;
		if (a-a2 > 0) then begin
			x := a-a2;
			if (b+x <= v) and (not used[a2, b+x, c]) then
				add(a2, b+x, c);
			if (c+x <= v) and (not used[a2, b, c+x]) then
				add(a2, b, c+x);
		end;
		if (b1-b > 0) then begin
			x := b1-b;
			if (a-x > 0) and (not used[a-x, b1, c]) then
				add(a-x, b1, c);
		end;
		if (b2-b > 0) then begin
			x := b2-b;
			if (a-x > 0) and (not used[a-x, b2, c]) then
				add(a-x, b2, c);
		end;
		if (c1-c > 0) then begin
			x := c1-c;
			if (a-x > 0) and (not used[a-x, b, c1]) then
				add(a-x, b, c1);
		end;
		if (c2-c > 0) then begin
			x := c2-c;
			if (a-x > 0) and (not used[a-x, b, c2]) then
				add(a-x, b, c2);
		end;
	end;
	for i := 1 to dn do
		dfs(d[i].a, d[i].b, d[i].c, k1+1);
	dn := 0;
	if (b > 0) then begin
		if (b+a <= v) and (not used[a+b, 0, c]) then
			add(a+b, 0, c);
		if (c+b <= v) and (not used[a, 0, c+b]) then
			add(a, 0, c+b);
		if (b-b1 > 0) then begin
			x := b-b1;
			if (a+x <= v) and (not used[a+x, b1, c]) then
				add(a+x, b1, c);
			if (c+x <= v) and (not used[a, b1, c+x]) then
				add(a, b1, c+x);
		end;
		if (b-b2 > 0) then begin
			x := b-b2;
			if (a+x <= v) and (not used[a+x, b2, c]) then
				add(a+x, b2, c);
			if (c+x <= v) and (not used[a, b2, c+x]) then
				add(a, b2, c+x);
		end;
		if (a1-a > 0) then begin
			x := a1-a;
			if (b-x > 0) and (not used[a1, b-x, c]) then
				add(a1, b-x, c);
		end;
		if (a2-a > 0) then begin
			x := a2-a;
			if (b-x > 0) and (not used[a2, b-x, c]) then
				add(a2, b-x, c);
		end;
		if (c1-c > 0) then begin
			x := c1-c;
			if (b-x > 0) and (not used[a, b-x, c1]) then
				add(a, b-x, c1);
		end;
		if (c2-c > 0) then begin
			x := c2-c;
			if (b-x > 0) and (not used[a, b-x, c2]) then
				add(a, b-x, c2);
		end;
	end;
	for i := 1 to dn do
		dfs(d[i].a, d[i].b, d[i].c, k1+1);
	dn := 0;
	if (c > 0) then begin
		if (b+c <= v) and (not used[a, b+c, 0]) then
			add(a, b+c, 0);
		if (c+a <= v) and (not used[a+c, b, 0]) then
			add(a+c, b, 0);
		if (c-c1 > 0) then begin
			x := c-c1;
			if (a+x <= v) and (not used[a+x, b, c1]) then
				add(a+x, b, c1);
			if (b+x <= v) and (not used[a, b+x, c1]) then
				add(a, b+x, c1);
		end;
		if (c-c2 > 0) then begin
			x := c-c2;
			if (a+x <= v) and (not used[a+x, b, c2]) then
				add(a+x, b, c2);
			if (b+x <= v) and (not used[a, b+x, c2]) then
				add(a, b+x, c2);
		end;
		if (b1-b > 0) then begin
			x := b1-b;
			if (c-x > 0) and (not used[a, b1, c-x]) then
				add(a, b1, c-x);
		end;
		if (b2-b > 0) then begin
			x := b2-b;
			if (c-x > 0) and (not used[a, b2, c-x]) then
				add(a, b2, c-x);
		end;
		if (a1-a > 0) then begin
			x := a1-a;
			if (c-x > 0) and (not used[a1, b, c-x]) then
				add(a1, b, c-x);
		end;
		if (a2-a > 0) then begin
			x := a2-a;
			if (c-x > 0) and (not used[a2, b, c-x]) then
				add(a2, b, c-x);
		end;
	end;
	for i := 1 to dn do
		dfs(d[i].a, d[i].b, d[i].c, k1+1);
	used[a, b, c] := False;
end;

procedure Solve;
var
	i,j,k					: Byte;
begin
	for i := 0 to v do
		for j := 0 to v do
			for k := 0 to v do
				used[i, j, k] := False;
	answ := 0;
	dfs(v, 0, 0, 0);
	writeln(answ);
        if (answ <> 2216) then
          halt(1);
end;

var
  t : text;
begin
assign(t,'tw5086.tmp');
rewrite(t);
writeln(t,'180 6');
writeln(t,'37 78 59 100 64 128');
close(t);
	readInput;
	Solve;
end.