Cerința
Pe o tablă de șah de dimensiune n
se află m
regine. O regină atacă o altă regină dacă cele două se află pe aceeași linie, coloană sau diagonală și între ele nu se află alte regine. Determinați numărul maxim p
de regine care sunt atacate de o aceeași regină și numărul q
de regine care atacă p
alte regine.
Date de intrare
Fișierul de intrare regine.in
conține pe prima linie numerele n m
; următoarele m
linii conțin perechi i j
reprezentând linia și coloana unde se află poziționată o regină.
Date de ieșire
Fișierul de ieșire regine.out
va conține pe prima linie numerele p q
, separate prin exact un spațiu, reprezentând valorile de mai sus.
Restricții și precizări
1 ≤ n ≤ 100
1 ≤ m ≤ 500
1 ≤ i,j ≤ n
- pe tablă nu există două regine suprapuse
Exemplu
regine.in
8 9 1 7 2 2 2 8 4 1 5 2 5 5 5 8 7 2 7 7
regine.out
5 1
Explicație
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Regine:
//regine
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("regine.in");
ofstream fout("regine.out");
const int di[]={-1,-1,-1, 0, 0, 1, 1, 1},
dj[]={-1, 0, 1,-1, 1,-1, 0, 1};
int a[105][105], n, m ;
int main(){
fin >> n >> m ;
for(int k = 1 ; k <= m ; ++k)
{
int i ,j ;
fin >> i >> j;
a[i][j] = 1;
}
int p = 0 , q = 0;
for(int i =1 ; i <= n ; ++i)
for(int j =1 ; j <= n ; ++j)
if(a[i][j] == 1)
{
int cnt = 0;
for(int k = 0 ; k < 8 ; k ++)
{
int x = 1;
while(i + di[k] * x > 0 && i + di[k] * x <= n && j + dj[k] * x > 0 && j + dj[k] * x <= n && a[i + di[k] * x][j + dj[k] * x] == 0)
x ++;
if(a[i + di[k] * x][j + dj[k] * x] == 1)
cnt ++;
}
if(cnt > p)
p = cnt, q = 1;
else
if(cnt == p)
q ++;
}
fout << p << " " << q << endl;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #602 Regine
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #602 Regine de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!