Giải bài ntucoder VOXO - Vòng xoắn

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

  1. nguyen minh duc

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

    Thuật toán:


    • Khởi chạy mảng 2 chiều chứa hình xoắn ốc của bài, lấy tọa độ a (i) (j) với i = 101 và j = 101 làm gốc tọa độ.
    • Dùng chương trình con để chạy từng cạnh một của hình xoắn ốc, ta sẽ khởi tạo từ trong ra ngoài.
    • Đối với 1 cạnh, hướng đi của ta sẽ thẳng tiến với 1 trục giữ nguyên, tức từ ô a (i) (j) sẽ đi đến một trong các ô a (i) (j+1), a (i) (j-1), a (i+1) (j), a (i-1) (j). Ta cần thiết lập một hướng đi.
    • Khi kết thúc cạnh, ta cần đổi hướng đi.
    • Ta nhận biết được khi kết thúc cạnh, thì ô bên trái theo chiều hướng đi sẽ bằng 0.

    Code:

    Mã:
    #include<bits/stdc++.h>
    using namespace std;
    
    int x, y, valuefor_position;
    int axis[207][207];
    
    void runfor(int position_x, int position_y, int direction_x, int direction_y){
        if (position_x == 0 || position_y == 0) return;
        int a = position_x, b = position_y;
        while (axis[a-direction_y][b+direction_x] != 0){
            axis[a] = valuefor_position+1;
            a += direction_x; b += direction_y;
            valuefor_position++;
        }
        runfor(a, b, -direction_y, direction_x);
    }
    
    void read(){
        ios_base::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        //freopen("VOXO.INP", "r", stdin);
        //freopen("VOXO.OUT", "w", stdout);
        cin >> x >> y;
    }
    
    void run(){
        axis[101][101] = 1;
        valuefor_position = 1;
        runfor(102, 101, 0, 1);
    
        cout << axis[x+101][y+101];
    }
    
    int main(){
        read();
        run();
    
        return 0;
    }
     
    Chỉnh sửa cuối: 31 Tháng bảy 2023
  2. Đăng ký Binance
Trả lời qua Facebook
Đang tải...