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;
}