Jocul betaşah se joacă folosindu-se doar piese asemănătoare damelor clasicului şah, numite tot dame. Suprafaţa de joc are o formă triunghiulară şi este formată din N*(N+1)/2
pătrate identice dispuse pe N
rânduri şi N
coloane. Rândurile se numerotează de sus în jos, de la 1
la N
. Coloanele se numerotează de la stânga la dreapta, de la 1
la N
. Primul rând conţine un singur pătrat, al doilea rând conţine două pătrate alăturate,…, al N
-lea rând conţine N
pătrate alăturate, ca în suprafeţele de joc cu N=6
din figurile de mai jos. Din cele N*(N+1)/2
pătrate, K
sunt gri, iar restul sunt albe. Poziţia fiecărui pătrat de pe suprafaţa de joc este dată de rândul şi coloana în care acesta este situat.
Pe suprafaţa de joc sunt aşezate D
dame în D
pătrate albe distincte, ocupându-le. Într-un pătrat alb poate fi aşezată o singură damă, iar într-un pătrat gri nu poate fi aşezată nicio damă. Poziţia unei dame pe suprafaţa de joc este dată de poziţia pătratului alb în care este aşezată dama.
Damele pot accesa orice pătrat alb neocupat situat pe direcţiile: verticală, orizontală sau diagonală, numerotate de la 1
la 8
în figura b). Accesul pe o direcţie se face trecând din pătrat alb în pătrat alb (doar pătrate albe neocupate) până la întâlnirea unui pătrat gri sau a unui pătrat alb ocupat de o altă damă sau până la terminarea suprafeţei de joc.
Numim pătrat accesibil orice pătrat alb neocupat (de pe suprafaţa de joc) care ar putea fi accesat de cel puţin una din cele D
dame.
De exemplu, pentru suprafaţa de joc din figura c) numărul de pătrate accesibile (marcate cu X
) de pe suprafaţă este 11
; pentru suprafaţa de joc cu N=6
, D=3
şi K=4
din figura d) numărul de pătrate accesibile de pe suprafaţă este 13
. În figura e) sunt marcate cu X
pătratele accesibile fiecărei dame de pe suprafaţa de joc din figura d).
Pătratele accesibile damei din rândul 3 şi coloana 2 | Pătratele accesibile damei din rândul 5 şi coloana 2 | Pătratele accesibile damei din rândul 5 şi coloana 4 | Pătratele accesibile de pe suprafaţa de joc |
Figura e) |
Cerințe
Scrieţi un program care să citească numerele naturale N
, D
, K
, poziţiile damelor şi ale pătratelor gri pe suprafaţa de joc şi care să determine:
a) numărul maxim M
de pătrate albe conţinute de un rând al suprafeţei de joc;
b) numărul P
de pătrate accesibile de pe suprafaţa de joc.
Date de intrare
Fișierul de intrare betasah.in
conține:
- pe prima linie cele trei numere naturale
N
,D
şiK
, separate prin câte un spaţiu, cu semnificaţia din enunţ; - pe linia
i+1
două numere naturale nenulex
i
şiy
i
, separate printr-un singur spaţiu, reprezentând poziţia dameii
pe suprafaţa de joc (rândulx
i
şi coloanay
i
), pentrui=1,2,3,…,D
; - pe linia
D+1+j
două numere naturale nenulez
j
şit
j
, separate printr-un singur spaţiu, reprezentând poziţia pătratului grij
pe suprafaţa de joc (rândulz
j
şi coloanat
j
), pentruj=1,2,3,…,K
.
Date de ieșire
Fișierul de ieșire betasah.out
va conține pe prima linie numărul natural M
şi pe a doua linie numărul natural P
, cu semnificaţia din enunţ.
Restricții și precizări
2 ≤ N ≤ 1000
;1 ≤ D ≤ 100
;1 ≤ K ≤ 50
;D + K ≤ N*(N+1)/2
;1 ≤ y
i
≤ x
i
≤ N
pentrui=1,2,3,...,D
;1 ≤ t
j
≤ z
j
≤ N
pentruj=1,2,3,...,K
;- pentru rezolvarea corectă a cerinţei a) se acordă
20%
din punctaj, iar pentru rezolvarea corectă a cerinţei b) se acordă80%
din punctaj.
Exemplu
betasah.in
6 3 4 3 2 5 2 5 4 3 1 4 3 6 4 1 1
betasah.out
5 13
Explicație
N=6
, D=3
, K=4
.
Rândurile 5
şi 6
conţin numărul maxim M=5
de pătrate albe.
Numărul de pătrate accesibile de pe suprafaţa de joc este P=13
.
În desenul de mai sus corespunzător suprafeţei date, cele 13
pătrate accesibile sunt marcate cu X
.
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 Betasah:
//prof. Carmen Minca
//Colegiul National de Informatica Tudor Vianu Bucuresti
#include <fstream>
using namespace std;
int n,d,k,pozdama[103][3], albe[1003];
char a[1003][1003];
ifstream f("betasah.in");
ofstream g("betasah.out");
int main()
{
//citire date
int i,l,c,j,i1;
f>>n>>d>>k;
for(i=1;i<=d;i++)
{
f>>l>>c;
a[l][c]=1;//codific cu 1 pozitia damei din joc
pozdama[i][1]=l;pozdama[i][2]=c;
}
for(i=1;i<=n;i++)albe[i]=i;
for(i=1;i<=k;i++)
{
f>>l>>c;
a[l][c]=2;//codific cu 2 patratele gri din joc
albe[l]--;//scad patratele gri din nr total de patrate de pe linia l
}
int M=albe[1]; //a)
for(i=2;i<=n;i++)M=max(albe[i],M);
//bordare matrice. Incadrez suprafata de joc cu patrate gri
//pentru a nu iesi din suprafata de joc
for(i=0;i<=n+1;i++)
a[i][0]=a[i][i+1]=a[i][i+2]=2;
for(j=0;j<=n+2;j++)
a[n+1][j]=2;
//determin pentru fiecare dama patratele accesibile
for(i=1;i<=d;i++)
{
l=pozdama[i][1]; c=pozdama[i][2];
//pe aceeasi linie
j=c-1;
while(a[l][j]!=2)//directia 7
{
if(a[l][j]==0)a[l][j]=3;
j--;
}
j=c+1;
while(a[l][j]!=2)//directia 3
{
if(a[l][j]==0)a[l][j]=3;
j++;
}
//pe aceeasi coloana
i1=l-1;
while(a[i1][c]!=2)//directia 1
{
if(a[i1][c]==0)a[i1][c]=3;
i1--;
}
i1=l+1;
while(a[i1][c]!=2)//directia 5
{
if(a[i1][c]==0)a[i1][c]=3;
i1++;
}
//pe diagonala 8-4
i1=l-1; j=c-1;
while (a[i1][j]!=2)//directia 8
{ if(a[i1][j]!=1) a[i1][j]=3;//marchez cu 3 patratele accesibile
i1--; j--;}
i1=l+1; j=c+1;
while (a[i1][j]!=2)//directia 4
{ if(a[i1][j]!=1) a[i1][j]=3;
i1++; j++;}
//pe diagonala 2-6
i1=l-1; j=c+1;
while (a[i1][j]!=2)//spre 2
{ if(a[i1][j]!=1) a[i1][j]=3;
i1--; j++;}
i1=l+1; j=c-1;
while (a[i1][j]!=2)//spre 6
{ if(a[i1][j]!=1) a[i1][j]=3;
i1++; j--;}
}
//numarul patratelor accesibile = nr valori de 3 din matrice
int P=0;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
if(a[i][j]==3)P++;
g<<M<<endl<<P<<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 #1039 Betasah
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1039 Betasah 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!