cerintac

🧩 Syntax:
#include <iostream>
#include <vector>
 
using namespace std;

bool InMatrice(int x, int y)
{
    return (x >= 1 && x <= 8 && y >= 1 && y <= 8);
}

class PiesaSah{
    private:
    int linie;
    char coloana;
    public:
    PiesaSah(int l=0, char c =' '){
        linie=l;
        coloana=c;
    }
    static int Distanta(PiesaSah p1, PiesaSah p2){
        return max(abs(p1.linie-p2.linie), abs(p1.coloana-p2.coloana));
    }
    bool operator<( const PiesaSah& other) const{
        PiesaSah origine(1,'A');
        int d1= Distanta(*this,origine);
        int d2= Distanta(other, origine);
        if(d1==d2){
            if(this->linie!=other.linie) 
                return this->linie<other.linie;
            return this->coloana>other.coloana;
        }
        return d1<d2;
    }
    int get_linie(){
        return linie;
    }
    char get_coloana(){
        return coloana;
    }
    virtual pair<vector<int>,vector<int>> get_directie(){
    
        vector<int> v1, v2;
        return make_pair(v1,v2);
    }
};
class Turn: public PiesaSah{
    public:
    Turn(int l, char c): PiesaSah(l,c){}
    pair<vector<int>,vector<int>> get_directie(){
        vector<int> dx_turn={1,0,-1,0};
        vector<int> dy_turn={0,1,0,-1};
        return make_pair(dx_turn,dy_turn);
    }
 
};
class Regina: public PiesaSah{
    public:
    Regina(int l, char c): PiesaSah(l,c){}
    pair<vector<int>,vector<int>> get_directie(){
        vector<int> dx_regina={1,0,-1,0,1,-1,1,-1};
        vector<int> dy_regina={0,1,0,-1,1,-1,-1,1};
        return make_pair(dx_regina, dy_regina);
    }
};
class Nebun: public PiesaSah{
    public:
    Nebun(int l, char c): PiesaSah(l,c){}
    pair<vector<int>,vector<int>> get_directie(){
        vector<int> dx_nebun={1,-1,1,-1};
        vector<int> dy_nebun={1,-1,-1,1};
        return make_pair(dx_nebun, dy_nebun);
    }
};

PiesaSah* tabla[9][9];
int nr_atacatori[9][9];


int main()
{
    int n;
    cin>>n;
    
    for(int i=0;i<9;i++)
        for(int j=0;j<9;j++)
            tabla[i][j]=NULL;
    for(int i=0;i<n;i++){
        char cod;
        int linie;
        char coloana;
        cin>>cod>>coloana>>linie;
        if(cod=='R'){
            tabla[linie][coloana - 'A'+1]= new Regina(linie,coloana);
        }else if(cod == 'T'){
            tabla[linie][coloana - 'A'+1]= new Turn(linie,coloana);
        }else if(cod=='N'){
            tabla[linie][coloana - 'A'+1]= new Nebun(linie,coloana);
        }
 
    }
    int maxElem=0;
    char maxcol;
     for(int j=1;j<9;j++){
         int cntPiese=0;
         for(int i=1;i<9;i++){
            if(tabla[i][j]!=NULL){
                cntPiese += 1;
            } 
 
         }
         if(cntPiese>maxElem){
             maxElem=cntPiese;
             maxcol='A'+j-1;//conversia din numar in litera
         }
     }   
    cout<<endl<<maxcol<<endl;
 
 
    PiesaSah piesamax(1,'A');
    for(int i=1;i<9;i++){
        for(int j=1;j<9;j++){
            if(tabla[i][j]!=NULL){
               if(piesamax<*tabla[i][j]){
                   piesamax=*tabla[i][j];
               } 
            }
        }
    }
    cout<<piesamax.get_coloana()<<piesamax.get_linie();

    int i, j, k;
    //cerinta c
    for(i=1;i<=8;i++){
        for(j=1;j<=8;j++)
            if(tabla[i][j]!=NULL)
            {
                pair<vector<int>, vector<int>> directie = tabla[i][j]->get_directie();
                vector<int> dx = directie.first;
                vector<int> dy = directie.second;
                for(k=0;k<dx.size();k++){
                    for(int d=1;d<=3;d++){
                        int i_vecin= i+dx[k]*d;
                        int j_vecin= j+dy[k]*d;
                        if(InMatrice(i_vecin,j_vecin)){
                            nr_atacatori[i_vecin][j_vecin]++;
                            if(tabla[i_vecin][j_vecin]!=NULL){
                                break;//nu mai continuam pe aceasta directie
                            }
                        }
                    }
                }
            }
            
    }
    int nrmax_atacatori=0;
    int i_max=0,j_max=0;
    for(i=1;i<=8;i++){
        for(j=1;j<=8;j++)
            if(nr_atacatori[i][j]>nrmax_atacatori){
                nrmax_atacatori=nr_atacatori[i][j];
                i_max=i;
                j_max=j;
            }
    }
    cout<<endl<<char('A'+j_max-1)<<i_max<<endl;
    return 0;
}