Xin chào, bạn được Nguyên Bảo mời tham gia diễn đàn viết bài kiếm tiền VNO, bấm vào đây để đăng ký.
1 người đang xem
Bài viết: 28 Tìm chủ đề
3811 5
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][b] == 0){
            bc[a][b] = 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[i][xc] == 0){
            bc[i][xc] = 1;
            ans++;
        }
        if (bc[xd][i] == 0){
            bc[xd][i] = 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;
}
 

Những người đang xem chủ đề này

Back