Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
一A纪念...今天身体虚弱,精神疲惫,写出来的程序七零八落,竟然一A了... 见讨论无代码,遂发。 type pos=record x,y:longint; end; const d:array[1..6,1..2]of integer=((-1,-1),(-1,0),(0,-1),(0,1),(1,0),(1,1)); var map:array[0..11,0..11]of integer; point:array[1..100]of pos; posi:array[0..11,0..11]of longint; a:array[0..100,0..100]of boolean; zero:array[1..100]of integer; i,j,k,ans,n,p,cot,coz,tmp:longint; v,vis:array[0..100]of boolean; procedure init; var i,j:longint; begin cot:=0;coz:=0;ans:=-maxlongint; fillchar(a,sizeof(a),false); for i:=1 to n do begin for j:=1 to i do begin read(map[i,j]); inc(cot); point[cot].x:=i; point[cot].y:=j; posi[i,j]:=cot; if map[i,j]=0 then begin inc(coz); zero[coz]:=cot; end; end; readln; end; end; procedure connect; var i,j:longint; begin for i:=1 to n do for j:=1 to i do begin if j<>1 then begin a[posi[i,j-1],posi[i,j]]:=true; a[posi[i,j],posi[i,j-1]]:=true; end; if i<>n then begin a[posi[i,j],posi[i+1,j]]:=true; a[posi[i+1,j],posi[i,j]] :=true; a[posi[i,j],posi[i+1,j+1]]:=true; a[posi[i+1,j+1],posi[i,j]]:=true; end; end; end; function judge(p,clr:integer):boolean; var i,np:longint; begin vis[p]:=true; v[p]:=true; for i:=1 to 6 do begin np:=posi[point[p].x+d[i,1],point[p].y+d[i,2]]; if (a[p,np])and(map[point[np].x,point[np].y]=clr)and(not vis[np]) then judge(np,clr); end; end; function dfs(o:longint):longint; var i,j,tp,np:integer; begin tp:=0; fillchar(v,sizeof(v),0); fillchar(vis,sizeof(vis),0); map[point[o].x,point[o].y]:=p; for i:=1 to coz do if zero[i]<>o then for j:=1 to 6 do begin vis[zero[i]]:=true; v[zero[i]]:=true; np:=posi[point[zero[i]].x+d[j,1],point[zero[i]].y+d[j,2]]; if a[np,zero[i]] then begin judge(np,map[point[np].x,point[np].y]); end; end; for i:=1 to cot do if not v[i] then if map[point[i].x,point[i].y]<>p then inc(tp) else dec(tp); map[point[o].x,point[o].y]:=0; exit(tp); end; begin //assign(input,'1.txt'); //assign(output,'2.txt'); //reset(input);rewrite(output); repeat readln(n,p); if (n=0)and(p=0) then break; init; connect; for i:=1 to coz do begin tmp:=dfs(zero[i]); if tmp>ans then ans:=tmp; end; writeln(ans); until false; //close(input);close(output); end. Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator