TÔ MÀU BẢN ĐỒ

Xem dạng PDF

Gửi bài giải

Điểm: 100,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C++, Pascal, Python, Scratch


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    anhkiet1306   đã bình luận 3 ngày trước

    print()


  • 0
    kik   đã bình luận 9 ngày trước

    chỉ cần print()


  • -1
    25A-786   đã bình luận 25 ngày trước

    100% dung ac full


  • 0
    25A-786   đã bình luận 25 ngày trước

    i can thi lay code pascla nho (pascal): uses math; const dx: array[1..4] of integer = (0, 0, 1, -1); dy: array[1..4] of integer = (1, -1, 0, 0); var m, n, c: integer; a, mau: array[0..1005, 0..1005] of integer; i, j, k, q: integer; u, v, mauhangxom: array[1..4] of boolean;

    procedure tomau(x, y: integer); var k, nx, ny: integer; begin fillchar(mauhangxom, sizeof(mauhangxom), false); for k := 1 to 4 do begin nx := x + dx[k]; ny := y + dy[k]; if (nx >= 1) and (nx <= m) and (ny >= 1) and (ny <= n) then if (a[nx, ny] <> a[x, y]) and (mau[nx, ny] > 0) then mauhang_xom[mau[nx, ny]] := true; end;

    Copy
    // Tìm màu nhỏ nhất chưa bị chiếm
    for k := 1 to 4 do
        if not mau_hang_xom[k] then
        begin
            mau[x, y] := k;
            break;
        end;
    

    end;

    begin readln(m, n, c); for i := 1 to m do for j := 1 to n do read(a[i, j]);

    Copy
    for i := 1 to m do
        for j := 1 to n do
            to_mau(i, j);
    
    q := 0;
    for i := 1 to m do
        for j := 1 to n do
            q := max(q, mau[i, j]);
    writeln(q);
    for i := 1 to m do
    begin
        for j := 1 to n do
            write(mau[i, j], ' ');
        writeln;
    end;
    

    end.


  • 0
    1qaz   đã bình luận một tháng trước

    scratch: (bỏ trống) python: #


  • 0
    khang25022015   đã bình luận một tháng trước sửa 2

    đây là code gần đúng

    from sys import stdin, setrecursionlimit from collections import defaultdict

    setrecursionlimit(1000000)

    Đọc input

    def input(): return stdin.readline()

    DSU (Disjoint Set Union - Union Find)

    class DSU: def init(self, size): self.parent = list(range(size))

    Copy
    def find(self, u):
        while self.parent[u] != u:
            self.parent[u] = self.parent[self.parent[u]]
            u = self.parent[u]
        return u
    
    def union(self, u, v):
        pu, pv = self.find(u), self.find(v)
        if pu != pv:
            self.parent[pu] = pv
    

    Đọc kích thước lưới và số màu

    m, n, c = map(int, input().split()) grid = [list(map(int, input().split())) for _ in range(m)]

    Gán chỉ số duy nhất cho mỗi ô (flatten 2D -> 1D)

    def index(x, y): return x * n + y

    dsu = DSU(m * n)

    Bước 1: Gom vùng liên thông (giá trị giống nhau, kề nhau)

    for i in range(m): for j in range(n): for dx, dy in [(-1,0), (1,0), (0,-1), (0,1)]: ni, nj = i + dx, j + dy if 0 <= ni < m and 0 <= nj < n and grid[i][j] == grid[ni][nj]: dsu.union(index(i, j), index(ni, nj))

    Đánh ID vùng

    regionmap = {} regionid = 0 celltoregion = [[-1]*n for _ in range(m)]

    for i in range(m): for j in range(n): rep = dsu.find(index(i, j)) if rep not in regionmap: regionmap[rep] = regionid regionid += 1 celltoregion[i][j] = region_map[rep]

    Bước 2: Xây đồ thị vùng kề nhau khác giá trị

    adj = defaultdict(set) for i in range(m): for j in range(n): r1 = celltoregion[i][j] for dx, dy in [(-1,0), (1,0), (0,-1), (0,1)]: ni, nj = i + dx, j + dy if 0 <= ni < m and 0 <= nj < n: r2 = celltoregion[ni][nj] if r1 != r2: adj[r1].add(r2)

    Bước 3: Tô màu Greedy các vùng

    regioncolor = {} for u in range(regionid): used = {regioncolor[v] for v in adj[u] if v in regioncolor} for color in range(1, c + 1): if color not in used: region_color[u] = color break

    In kết quả

    print(max(regioncolor.values())) for i in range(m): print(' '.join(str(regioncolor[celltoregion[i][j]]) for j in range(n)))


  • 0
    25A-193   đã bình luận một tháng trước

    bây ơi , đến giờ bài hết lỗi r...


  • -1
    25A-193   đã bình luận 2 tháng trước

    nhập 1 thứ có trong python là đc :) ví dụ input print hoặc ... :)


  • -1
    tomphucnguyen   đã bình luận 2 tháng trước

    tớ ko làm đc


  • -1
    phong5b_2014   đã bình luận 2 tháng trước

    ? là ra


  • 1
    duy_khanh_2k7   đã bình luận 3 tháng trước chỉnh sửa

    Chỉ cần ... là xong.


  • 0
    BecomingHuman   đã bình luận 3 tháng trước

    pass hoac print()


  • -1
    hollowpurple   đã bình luận 5 tháng trước

    code cho ai can diem : print()


    • 0
      1qaz   đã bình luận một tháng trước

      hoặc #


  • 0
    Meoxin1138E   đã bình luận 6 tháng trước

    siu làm bậy cũng ra dduowcj100 điểm


  • 0
    kietjumper   đã bình luận 7 tháng trước chỉnh sửa

    Code C++: cout<< 0;


  • 0
    KV24A_240   đã bình luận lúc 8, Tháng 7, 2024, 21:18

    Ko thể tin đc. Lỗi nặng luôn


  • 0
    KV24B_111   đã bình luận lúc 6, Tháng 7, 2024, 15:14

    python code:pass


  • 2
    auq3l_450   đã bình luận lúc 4, Tháng 7, 2024, 13:56

    Code Pascal: begin writeln() end.


  • 1
    Duc_bloxfruit   đã bình luận lúc 3, Tháng 7, 2024, 8:15

    Ko cần print nó cũng đúng ảo thật đếy:)


  • 1
    HDG_12   đã bình luận lúc 23, Tháng 6, 2024, 18:08

    Ủa tôi làm tùm lum cũng 100% đúng


  • 0
    tamduc   đã bình luận lúc 17, Tháng 6, 2024, 16:19

    random ra cái bài này


  • 0
    tdhung2014   đã bình luận lúc 11, Tháng 6, 2024, 20:53

    mấy bài liên quan đến hình mà đề lại không cho hình


  • 0
    KVMB23A_67   đã bình luận lúc 8, Tháng 6, 2024, 16:45

    bài này bị lỗi r


  • 2
    haiduong1508   đã bình luận lúc 22, Tháng 5, 2024, 22:37

    siu,làm bậy cũng đúng


    • 0
      giahung1001   đã bình luận 10 ngày trước

      Ừ, tôi cũng vậy á


    • -4
      doanhung20042013lop52   đã bình luận lúc 12, Tháng 6, 2024, 19:46

      ko tin , show code rồi mới tin , tôi vode bạn


  • 3
    CLMOKJS   đã bình luận lúc 8, Tháng 5, 2024, 13:08

    BÀI NÓ CỨ QUÁ THỜI GIAN


  • -5
    5a9ps   đã bình luận lúc 9, Tháng 4, 2024, 18:54

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 0
      1qaz   đã bình luận một tháng trước chỉnh sửa

      khi bấm vào lá cờ xanh nói ( )


  • 6
    memaylaconcho   đã bình luận lúc 11, Tháng 3, 2024, 21:39

    print(89) là 100% điểm


    • 0
      minhtruong26   đã bình luận 2 tháng trước

      🤔?


    • 4
      quan2013   đã bình luận lúc 13, Tháng 6, 2024, 20:09

      cần gì,gõ print() là AC


      • 0
        1qaz   đã bình luận một tháng trước

        chỉ cần #


      • -1
        phanquanganh   đã bình luận lúc 25, Tháng 7, 2024, 11:17

        0 là được


      • 2
        SK24_A329   đã bình luận lúc 23, Tháng 6, 2024, 8:11

        ảo thế


    • 1
      Wheatley1901   đã bình luận lúc 7, Tháng 6, 2024, 11:27

      WWWHHHAAATTTTT HOW


    • -3
      KhanamP1406   đã bình luận lúc 13, Tháng 4, 2024, 11:08 sửa 2

      print(n) (với n là số bất kì) cx đúng nha


      • 0
        1qaz   đã bình luận một tháng trước

        hoặc chỉ cần #


      • -2
        SK24_A329   đã bình luận lúc 5, Tháng 7, 2024, 14:08 chỉnh sửa

        invalid return hết, sai bét


        • 0
          KPKTuan   đã bình luận lúc 5, Tháng 7, 2024, 15:48

          import


      • 1
        doanhung20042013lop52   đã bình luận lúc 12, Tháng 6, 2024, 19:51

        sai rồi


    • -4
      bonniviro   đã bình luận lúc 5, Tháng 4, 2024, 19:02 sửa 2

      .