题意:不知道怎么说。。。。。。
这不跟斗地主一样。。xjb乱搜索,超不喜欢这种题。。。因为我自带技能代码量*1.5
var
b,a,c,s:array[0..10,0..100]of longint;
n,i,t,j,k,ans1,l,x,p:longint;
ans:Array[0..100]of longint;
ch,ch1:char;
bz:Array[0..4,0..100]of boolean;
s1:ansistring;
procedure dg(x,y,sum,num:longint);
var
i,j,k,l,t:longint;
begin
if (y>9)then
begin
dg(x+1,1,sum,num);
exit;
end;
if (num<>0)then
begin
if (s[x,y]div 3+sum+num<4)then exit;
end
else
if (sum+1+(s[x,y]-2)div 3<4)then exit;
t:=3;
if (x>3)then
begin
if (sum+num<4)then exit;
t:=0;
if (num=0)then
begin
for i:=1 to 3 do
begin
for j:=1 to 9 do
if (a[i,j]<>0)and(not bz[i,j])then
begin
t:=b[i,j];
bz[i,j]:=true;
break;
end;
if (t<>0)then break;
end;
end
else
begin
for i:=1 to 3 do
begin
for j:=1 to 9 do
if (a[i,j]>1)then
begin
if (not bz[i,j])then
begin
t:=b[i,j];
bz[i,j]:=true;
end;
break;
end
else
if (a[i,j]<>0)and(a[i,j+1]<>0)then
begin
if (not bz[i,j-1])then
begin
t:=b[i,j-1];
bz[i,j-1]:=true;
end;
if (not bz[i,j+2])then
begin
t:=t+b[i,j+2];
bz[i,j+2]:=true;
end;
break;
end;
if (t<>0)then break;
end;
end;
inc(ans[p],t);
exit;
end;
if (a[x,y]<=2)then dg(x,y+1,sum,num);
if (0=a[x,y])then exit;
if (a[x,y]=1)then
begin
dec(a[x,y]);
if (a[x,y+1]<>0)and(0<>a[x,y+2])then
begin
dec(a[x,y+1]);
dec(a[x,y+2]);
dg(x,y+1,sum+1,num);
inc(a[x,y+1]);
inc(a[x,y+2]);
end;
inc(a[x,y]);
end
else if (a[x,y]=2)then
begin
if (num=0)then
begin
a[x,y]:=0;
dg(x,y+1,sum,num+1);
a[x,y]:=2;
end;
t:=1;
while (a[x,y+1]>=t)and(a[x,y+2]>=t)and(t<3)do
begin
dec(a[x,y+1],t);
dec(a[x,y+2],t);
dec(a[x,y],t);
dg(x,y+1,sum+t,num);
inc(a[x,y+1],t);
inc(a[x,y+2],t);
inc(a[x,y],t);
inc(t);
end;
a[x,y]:=2;
end
else
if (a[x,y]=3)then
begin
if (0=num)then
begin
a[x,y]:=1;
dg(x,y+1,sum,num+1);
a[x,y]:=0;
if (a[x,y+1]<>0)and(0<>a[x,y+2])then
begin
dec(a[x,y+1]);
dec(a[x,y+2]);
dg(x,y+1,sum+1,num+1);
inc(a[x,y+1]);
inc(a[x,y+2]);
end;
end;
a[x,y]:=0;
dg(x,y+1,sum+1,num);
a[x,y]:=3;
t:=1;
while (a[x,y+1]>=t )and( a[x,y+2]>=t )and( t<4)do
begin
dec(a[x,y+1],t);
dec(a[x,y+2],t);
dec(a[x,y],t);
dg(x,y+1,sum+t,num);
inc(a[x,y+1],t);
inc(a[x,y+2],t);
inc(a[x,y],t);
inc(t);
end;
end
else
begin
if (0=num)then
begin
a[x,y]:=2;
dg(x,y+1,sum,num+1);
t:=1;
while (a[x,y+1]>=t)and(a[x,y+2]>=t)and(t<3)do
begin
dec(a[x,y+1],t);
dec(a[x,y+2],t);
dec(a[x,y],t);
dg(x,y+1,sum+t,num+1);
inc(a[x,y+1],t);
inc(a[x,y+2],t);
inc(a[x,y],t);
inc(t);
end;
end;
a[x,y]:=1;
dg(x,y+1,sum+1,num);
a[x,y]:=0;
if (a[x,y+1]<>0)and(0<>a[x,y+2])then
begin
dec(a[x,y+1]);
dec(a[x,y+2]);
dg(x,y+1,sum+2,num);
inc(a[x,y+1]);
inc(a[x,y+2]);
end;
a[x,y]:=4;
t:=1;
while (a[x,y+1]>=t)and(a[x,y+2]>=t)and(t<5)do
begin
dec(a[x,y+1],t);
dec(a[x,y+2],t);
dec(a[x,y],t);
dg(x,y+1,sum+t,num+1);
inc(a[x,y+1],t);
inc(a[x,y+2],t);
inc(a[x,y],t);
inc(t);
end;
end;
end;
begin
{assign(input,'Mahjong.in');
assign(output,'Mahjong.out');
reset(input);
rewrite(output);}
n:=14;
i:=0;
readln(s1);
j:=1;
while j<=length(s1) do
begin
x:=ord(s1[j])-48;
ch:=s1[j+1];
inc(i);
if (ch='w')then k:=1
else if (ch='p')then k:=2
else k:=3;
inc(a[k,x]);
if (a[k,x]=1)then c[k,x]:=i;
inc(j,3);
end;
for i:=1 to 3 do
for j:=1 to 9 do
b[i,j]:=4-a[i,j];
for i:=3 downto 1 do
begin
s[i,9]:=s[i+1,1]+a[i,9];
for j:=8 downto 1 do
s[i,j]:=s[i,j+1]+a[i,j];
end;
for i:=1 to 3 do
for j:=1 to 9 do
begin
if (0=a[i,j])then continue;
fillchar(bz,sizeof(bz),0);
p:=c[i,j];
inc(b[i,j]);
dec(a[i,j]);
dg(1,1,0,0);
if (ans[p]>ans[ans1])or(ans[p]=ans[ans1])and(p<ans1)then ans1:=p;
inc(a[i,j]);
dec(b[i,j]);
end;
writeln(ans1,' ',ans[ans1]);
end.