Trang chủ Tin Học Lớp 9 hsg tin 9 Ốc sên ăn rau Một khu vườn...

hsg tin 9 Ốc sên ăn rau Một khu vườn hình chữ nhật có kích thước NxM (N dòng, M cột). Ta đánh số các dòng từ 1 đến N theo

Câu hỏi :

hsg tin 9 Ốc sên ăn rau Một khu vườn hình chữ nhật có kích thước NxM (N dòng, M cột). Ta đánh số các dòng từ 1 đến N theo chiều từ trên xuống dưới và các cột từ 1 đến M theo chiều từ trái sang phải để chia khu vườn thành các ô. Trong các ô đó, ngoài những ô là đất để người nông dân trồng rau vẫn có những ô là đá không thể trồng rau được. Một chú ốc sên xuất phát tại ô (x, y) (x là vị trí dòng, y là vị trí cột). Nếu ô xuất phát là đất, chú ốc sên có thể di chuyển sang 4 ô kề cạnh với ô đó (bên trái, bên phải, bên trên, bên dưới) và đương nhiên không thể di chuyển vào ô đá được. Trường hợp ô xuất phát là đá thì chú ốc sên không thể di chuyển đến ô nào khác. Yêu cầu: Hãy tính xem chú ốc sên có thể di chuyển đến nhiều nhất là bao nhiêu ô để ăn rau?  Dữ liệu vào: Từ tệp văn bản OCSEN.INP gồm: - Dòng thứ nhất gồm 4 số nguyên N, M, X, Y (mỗi số cách nhau một khoảng trắng) (1 ≤ X ≤ N ≤ 2000, 1 ≤ Y ≤ M ≤ 2000); - Trong N dòng tiếp theo, mỗi dòng gồm M số nguyên 0 hoặc 1 (mỗi số cách nhau một khoảng trắng). Số 0 nghĩa là ô trồng rau, số 1 nghĩa là ô đá.  Dữ liệu ra: Ghi ra tệp văn bản OCSEN.OUT gồm một số nguyên là số lượng ô lớn nhất mà chú ốc sên có thể di chuyển đến để ăn rau. Nếu chú ốc sên không ăn được ô rau nào thì ghi kết quả là -1.  Ví dụ: OCSEN.INP OCSEN.OUT 4 5 2 4 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 1 10 Ràng buộc:  Sub1: Có 50% test tương ứng 50% số điểm của bài với N, M

Lời giải 1 :

const fi = 'OCSEN.INP';

fo = 'OCSEN.OUT';

maxn=2000;

tkx : array [1..4] of shortint = (0, 0, 1, -1);

tky : array [1..4] of shortint = (-1, 1, 0, 0);
type dbg = record x, y : integer;

dem : longint;

end;
var a : array [1..maxn, 1..maxn] of shortint;
    mark : array [1..maxn, 1..maxn] of boolean;
    n, m, x, y : integer;ok : boolean; kq: integer;  dem:longint;f : text;
    kqu : array [1..maxn*maxn] of dbg;
   procedure    docfile;
      var       i, j : integer;
      begin
            fillchar(mark, sizeof(mark), false);assign(f, fi);  reset(f);
            readln(f, n, m, x, y); dem:=0;
            for i := 1 to n do for j := 1 to m do read(f, a[i,j]);
      end;
   procedure    xuli;
      var       i, j, u, v, fi, ki : longint;
      begin
          ok := false;
          fi := 1;  ki := 1;  // kqu[x].x := 1;  kqu[y].y := 1; kqu[1].d := 1;
          kqu[1].x := x;  kqu[1].y := y; kqu[1].dem := 1; mark[x,y] := true;  inc(dem);
          repeat
              i := fi;  inc(fi);
              for j := 1 to 4 do
                 begin
   // kqu[ki].x := u; kqu[ki].y := v; //kqu[ki].d := kqu[i].d +1;  ok:=false;                    
   u := kqu[i].x + tkx[j];  v := kqu[i].y + tky[j]; 
                      if (u>0) and (u<=n) and (v>0) and (v<=m)
                        and (not mark[u,v]) and (a[u,v]=0) then
                          begin
                                mark[u,v] := true; inc(ki); kqu[ki].x := u; kqu[ki].y := v;
                                inc(dem); ok:=true;
                          end;
                 end;
            until (fi>ki);
     // kqu[x].x := 1;  kqu[y].y := 1; kqu[1].d := 1;ok:=true;
          end;
   procedure       ghifile;
       begin
           assign(f, fo);  rewrite(f);
           if dem=0 then writeln(f,-1) else writeln(f, dem);
           close(f);
       end;
begin
    docfile; if a[x,y]<>1 then xuli;    ghifile;
end.

$#Trumtinhoc$

Thảo luận

-- Cho mình hỏi cái dấu chấm (vd như: kqu[1].x := x; ) là có tác dụng j vậy ạ

Lời giải 2 :

Dữ liệu vào: standard inputDữ liệu ra: standard outputGiới hạn thời gian: 1.0 giâyGiới hạn bộ nhớ: 128 megabyteĐăng bởi: NTUcoder
       Có một khu vườn hình chữ nhật kích thước n x m ô vuông (n dòng, m cột). Ta đánh số các dòng từ 1 đến n theo chiều từ trên xuống dưới, các cột từ 1 đến m theo chiều từ trái qua phải. Tại những ô vuông là đất bình thường người ta trồng rau. Tuy nhiên có một số ô là đá nên không trồng rau được. Có một chú ốc sên tại ô (y, x), y là vị trí dòng, x là vị trí cột. Từ một ô, chú ốc sên chỉ có thể di chuyển sang 4 ô liền kề (y-1, x), (y+1, x), (y, x-1), (y, x+1). Nếu gặp ô đá thì ốc sên không đi vào được.       Ốc sên đang rất đói. Bạn hãy xác định xem chú có thể ăn được số lượng rau nhiều nhất là bao nhiêu.Dữ liệu vào: gồm các dòng sau:- Dòng thứ nhất gồm bốn số nguyên n, m, y, x, mỗi số các nhau một khoảng trắng (1 ≤ y ≤ n ≤ 100,1 ≤ x ≤ m ≤ 100).- Trong n dòng tiếp theo, mỗi dòng gồm m số nguyên 0 hoặc 1 biểu thị vườn rau, mỗi số cách nhau một khoảng trắng. Số 0 nghĩa là ô rau, còn số 1 nghĩa là ô đá.(Dữ liệu cho đảm bảo ô (y, x) là ô rau)Dữ liệu xuất:- Là một số nguyên xác định số lượng ô lớn nhất mà ốc sên có thể di chuyển đến.Ví dụ

  • input4 5 2 4
    0 0 1 0 0
    0 1 0 0 1
    1 0 0 0 0
    0 1 0 0 1output10
  • input1 1 1 1
    0output1
  • Solution :
  • #include<iostream> using namespace std; int a[4] = {-1,1,0,0},b[4] = {0,0,-1,1},n,m,x,y,danhDau[105][105],dem = 0; void nhap (){ for(int i = 0;i<n;i++){ for(int j = 0;j<m;j++){ cin >> danhDau[i][j]; } } } void backtracking(int y,int x){ for(int i = 0;i<4;i++){ int u = y + a[i]; int v = x + b[i]; if(u>=0 && u<n && v>=0 && v<m && danhDau[u][v]==0){ dem++; danhDau[u][v] = 1; backtracking(u,v); } } } int main (){ cin >> n >> m >> y >> x; nhap(); if(danhDau[y-1][x-1] == 0){ danhDau[y-1][x-1] = 1; dem++; } backtracking(y-1,x-1); cout << dem; }

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, sắp phải bước vào một kì thi căng thẳng và sắp chia tay bạn bè, thầy cô và cả kì vọng của phụ huynh ngày càng lớn mang tên "Lên cấp 3". Thật là áp lực nhưng các em hãy cứ tự tin vào bản thân là sẻ vượt qua nhé!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247