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:
Exemplu
betasah.in
6 3 43 2 5 25 43 14 36 41 1
betasah.out
513
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
.
#include <bits/stdc++.h> using namespace std; ifstream cin("betasah.in"); ofstream cout("betasah.out"); int a[1001][1001]; int main() { int n , d , k; cin >> n >> d >> k; for(int i = 1 ; i <= n ; ++i) for(int j = 1 ; j <= n ; ++j) if(i < j) a[i][j]=1; int x , y; for(int i = 0 ; i < d ; ++i) cin >> x >> y , a[x][y]=2; for(int i = 0 ; i < k ; ++i) cin >> x >> y , a[x][y]=1; int max=0; int cnt=0; int ind=0; for(int i = 1 ; i <= n ; ++i) { cnt=0; for(int j = 1 ; j <= n ; ++j) { if(a[i][j]==0 || a[i][j]==2) cnt++; } if(cnt > max) max=cnt; } cout << max << '\n'; for(int i = 1 ; i <= n ; ++i) { for(int j = 1 ; j <= n ; ++j) { if(a[i][j]==2) { int ci=i , cj=j; i--; while(a[i][j]!=1 && a[i][j]!=2 && i>=1) { a[i][j]=3; i--; } i = ci; j--; while(a[i][j]!=1 && a[i][j]!=2 && j>=1) { a[i][j]=3; j--; } j=cj; i++; while(a[i][j]!=1 && a[i][j]!=2 && i<=n) { a[i][j]=3; i++; } i=ci; j++; while(a[i][j]!=1 && a[i][j]!=2 && j<=n) { a[i][j]=3; j++; } j=cj; i-- , j--; while(a[i][j]!=1 && a[i][j]!=2 && i>=1 && j>=1) { a[i][j]=3; i-- , j--; } i=ci , j=cj; i-- , j++; while(a[i][j]!=1 && a[i][j]!=2 && i>=1 && j<=n) { a[i][j]=3; i-- , j++; } i=ci , j=cj; i++ , j++; while(a[i][j]!=1 && a[i][j]!=2 && i<=n && j<=n) { a[i][j]=3; i++ , j++; } i=ci , j=cj; i++ , j--; while(a[i][j]!=1 && a[i][j]!=2 && i<= n && j>=1) { a[i][j]=3; i++ , j--; } i=ci , j=cj; } } } cnt=0; for(int i = 1 ; i <= n ; ++i) { for(int j = 1 ; j <= n ; ++j) { if(a[i][j]==3) cnt++; } } cout << cnt; return 0; }