Welcome! You have been invited by Admin to join our community. Please click here to register.
1 người đang xem
Bài viết: 28 Tìm chủ đề
3517 15
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][b] = 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:

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

Nội dung nổi bật

Xu hướng nội dung

Back