Change background image
Chuyên Tin - Lê Khiết

Go downThông điệp [Trang 1 trong tổng số 1 trang]

© FMvi.vn

Fri Jan 27, 2012 5:12 pm
Admin
Admin
Admin

Code - Huyền Thoại

Bài tập 5: CHIA ĐẤT
Một người nông dân có thửa ruộng HCN kích thước NxM, ông ta phân chia ruộng cho k người con đánh số từ 1 đến k( k<=10)
Việc phân chia thực hiện như sau: thửa ruộng được phân thành từng ô vuông có cạnh = 1 đơn vị độ dài. Ban đầu, mỗi người con nhận được trước 1 ô vuông, ko có trường hợp 2 người cùng nhận chung một ô và ko có trường hợp 2 người nhận ô vuông ban đầu có giá trị = nhau. Sau đó ở mỗi lượt, lần lượt mỗi người con theo số hiệu từ nhỏ đến lớn, nhậ tiếp các ô vuông chưa có ai nhận có giá trị = giá trị ô nhận ban đầu và kề cạnh với một trong các ô thuộc sở hữu của mình.
Hãy xác định diện tích nhận được của mỗi người.
DL vào: CHIADAT.INP
Dòng 1: ghi 3 số N,M,k
K dòng tiếp theo mỗi dòng gồm 2 số nguyên dương chỉ tọa độ ô của người con nhận.
Dòng thứ i trong N dòng tiếp theo, mỗi dòng ghi M số nguyên dương <=200.
DL ra: CHIADAT.OUT
Ghi k số: số thứ i trong k số là diện tích người con thứ i nhận được
Ví dụ:
CHIADAT.INP
4 7 3
1 2
3 6
4 3
CHIADAT.OUT
11 12 5
1 1 1 1 1 2 2
1 1 1 1 2 2 2
1 1 3 2 2 2 2
3 3 3 3 2 2 2
CHƯƠNG TRÌNH:
Code:

program chiadat;
const fi='chiadat.inp';fo='chiadat.out';
vx:array[1..4] of integer=(0,0,-1,1);
vy:array[1..4] of integer=(-1,1,0,0);
var m,n,k,x,y,s,d,c:integer;f:text;
a:array[1..100,1..100] of integer;
qx,qy,gx,gy:array[1..100] of integer;
procedure doc;
var i,j,z:integer;
begin
assign(f,fi);reset(f);
readln(f,n,m,k);
for z:=1 to k do readln(f,gx[z],gy[z]);
for i:=1 to n do
begin
for j:=1 to m do read(f,a[i,j]);
end;
readln(f);
close(f);
end;
procedure hdrong;
begin

d:=1;c:=0;
end;
function nt(x,y:integer):boolean;
begin
if (x>=1)and(x<=n)and(y>=1)and(y<=m) then
nt:=true else nt:=false;
end;
procedure them(x,y:integer);
begin
inc(c);qx[c]:=x;qy[c]:=y;
end;
procedure lay(var x,y:integer);
begin
x:=qx[d];y:=qy[d];inc(d);
end;
procedure loang(x,y:integer;var s:integer);
var i,x1,y1,t:integer;
begin
hdrong;them(x,y);t:=a[x,y];a[x,y]:=0;
while d<=c do
begin
lay(x,y);
for i:=1 to 4 do
begin
x1:=x+vx[i];
y1:=y+vy[i];
if nt(x1,y1) and (a[x1,y1]=t) then
begin
them(x1,y1);
inc(s);a[x1,y1]:=0;
end;
end;
end;
end;
procedure ghi;
var i,j,z:integer;
begin
assign(f,fo);rewrite(f);
for i:=1 to n do
for j:=1 to m do
begin
s:=1;
for z:=1 to k do
if (i=gx[z]) and (j=gy[z]) then
begin
loang(i,j,s);
write(f,s,' ');
end;
end;
end;

BEGIN
doc;ghi;close(f);
END.
https://chuyentinlk.123.st

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà Admin
Trả lời nhanh

Về Đầu TrangThông điệp [Trang 1 trong tổng số 1 trang]

  © FMvi.vn

|_-Diễn Đàn Tin Học - Lê Khiết-_|

« Xem bài trước | Xem bài kế tiếp »

Bài viết liên quan

    Quyền hạn của bạn:

    Bạn không có quyền trả lời bài viết