Giải bài ntucoder BACO - Bàn cờ

Thảo luận trong 'Khác' bắt đầu bởi nguyen minh duc, 30 Tháng bảy 2023.

  1. nguyen minh duc

    Bài viết:
    28
    Link bài:

    Thuật toán:

    • Ta duyệt các ô trống, nếu ô đó chưa kiểm soát thì ta đánh dấu lại.
    • Quân xe sẽ kiểm soát các ô từ dòng 1-8 của cột xc và các ô từ cột 1-8 của dòng xd.
    • Quân tượng sẽ kiểm soát các đường chéo tỏa ra 4 hướng.

    Code:

    Mã:
    #include <bits/stdc++.h>
    using namespace std;
    
    int bc[70][70];
    int xd, xc, td, tc, ans;
    
    void runfor(int position_x, int position_y, int direction_x, int direction_y){
        int a = position_x; int b = position_y;
        while(a <= 8 && a > 0 && b <= 8 && b > 0){
            if (bc[a] == 0){
                bc[a] = 1;
                ans++;
            }
            a += direction_x; b += direction_y;
        }
    }
    
    void read(){
        ios_base::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        //freopen("BACO.INP", "r", stdin);
        //freopen("BACO.OUT", "w", stdout);
        cin >> xd >> xc >> td >> tc;
    }
    
    void run(){
        for(int i = 1; i <= 8; i++){
            if (bc[xc] == 0){
                bc[xc] = 1;
                ans++;
            }
            if (bc[xd] == 0){
                bc[xd] = 1;
                ans++;
            }
        }
        runfor(td, tc, 1, 1);
        runfor(td, tc, 1, -1);
        runfor(td, tc, -1, -1);
        runfor(td, tc, -1, 1);
    
        cout << ans;
    }
    
    int main(){
        read();
        run();
    
        return 0;
    }
    
     
Trả lời qua Facebook
Đang tải...