154412025-02-19 16:15:18PKBÜtős helyzet (75 pont)cpp17Elfogadva 75/753ms548 KiB
#include <iostream>
#include <cmath>
using namespace std;

int board[9][9];

bool canAttack(int ptype, int ax, int ay, int tx, int ty) {
    if (ax == tx && ay == ty) return false;
    int dx = tx - ax, dy = ty - ay;
    int stepX = 0, stepY = 0;

    if(ptype == 1) {
        if(dx == 0 && dy != 0) {
            stepY = (dy > 0) ? 1 : -1;
            stepX = 0;
        } else if(dy == 0 && dx != 0) {
            stepX = (dx > 0) ? 1 : -1;
            stepY = 0;
        } else {
            return false;
        }
    } else if(ptype == 2) {
        if(dx == 0 && dy != 0) {
            stepY = (dy > 0) ? 1 : -1;
            stepX = 0;
        } else if(dy == 0 && dx != 0) {
            stepX = (dx > 0) ? 1 : -1;
            stepY = 0;
        } else if(abs(dx) == abs(dy)) {
            stepX = (dx > 0) ? 1 : -1;
            stepY = (dy > 0) ? 1 : -1;
        } else {
            return false;
        }
    }

    int curx = ax + stepX, cury = ay + stepY;
    while(curx != tx || cury != ty) {
        if(board[curx][cury] != 0) return false;
        curx += stepX;
        cury += stepY;
    }
    return true;
}

int main(){

    int N;
    cin >> N;

    for (int i = 1; i <= 8; i++){
        for (int j = 1; j <= 8; j++){
            board[i][j] = 0;
        }
    }

    for(int op = 0; op < N; op++){
        int T, X, Y;
        cin >> T >> X >> Y;

        if(T == 1 || T == 2){

            if(board[X][Y] != 0){
                cout << "NEM" << "\n";
                continue;
            }

            bool valid = true;
            for(int i = 1; i <= 8 && valid; i++){
                for(int j = 1; j <= 8 && valid; j++){
                    if(board[i][j] != 0){
                        if(canAttack(T, X, Y, i, j)) {
                            valid = false;
                            break;
                        }
                        if(canAttack(board[i][j], i, j, X, Y)) {
                            valid = false;
                            break;
                        }
                    }
                }
            }

            if(valid){
                board[X][Y] = T;
                cout << "IGEN" << "\n";
            } else {
                cout << "NEM" << "\n";
            }
        } else if(T == 3){
            board[X][Y] = 0;
            cout << "-" << "\n";
        }
    }

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base75/75
1Elfogadva0/01ms316 KiB
2Elfogadva0/03ms316 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/33ms316 KiB
7Elfogadva5/53ms316 KiB
8Elfogadva6/63ms548 KiB
9Elfogadva6/63ms316 KiB
10Elfogadva6/63ms316 KiB
11Elfogadva6/63ms316 KiB
12Elfogadva6/63ms316 KiB
13Elfogadva6/63ms316 KiB
14Elfogadva6/63ms508 KiB
15Elfogadva6/63ms316 KiB
16Elfogadva6/63ms316 KiB
17Elfogadva6/63ms316 KiB