Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Zadatak: Othello, Infokup 2012, 7.r. državno
- Ponuđeno rješenje: Kristijan Burnik
- Posebna zahvala na pomoći: Dominik Fistrić
- */
- #include <iostream>
- #include <cstdlib>
- #include <vector>
- using namespace std;
- const int R = 8, S = 8;
- const int X = 1;
- const int O = 2;
- // kod globalnih matrica, resetira se sve u nulu
- int ploca[R][S];
- int n;
- int okrenutih = 0;
- // sva zatvaranja (zrake oko trenutnog žetona)
- /*
- D - dalji žeton {dr,ds}
- B - bliži žeton {br,bs}
- T - treutni žeton (nije naveden jer je uvijek {0,0} )
- D D D
- BBB
- DBTBD
- BBB
- D D D
- */
- int zatvaranja[8][2][2] = {
- {{-2,-2},{-1,-1}},
- {{-2,0},{-1,0}},
- {{-2,2},{-1,1}},
- {{0,2},{0,1}},
- {{2,2},{1,1}},
- {{2,0},{1,0}},
- {{2,-2},{1,-1}},
- {{0,-2},{0,-1}},
- };
- void okreni(int r, int s, int igrac) {
- int br,bs,dr,ds;
- for (int k = 0; k < 8; k++) {
- // pozicija blizeg
- br=zatvaranja[k][1][0];
- bs=zatvaranja[k][1][1];
- // pozicija daljeg
- dr=zatvaranja[k][0][0];
- ds=zatvaranja[k][0][1];
- // izvan matrice
- if ( (r+br) >= R || (r+br) < 0 || (s+bs) >= S || (s+bs) < 0 )
- continue; // preskoci ovaj korak petlje
- int trenutni = ploca[r][s];
- int blizi = ploca[r+br][s+bs];
- int dalji = ploca[r+dr][s+ds];
- // prazno polje, preskoci
- if (blizi == 0 || dalji == 0)
- continue;
- if (dalji != blizi && blizi != trenutni ) {
- // okreni
- ploca[r+br][s+bs] = igrac;
- // pribroji
- okrenutih++;
- }
- }
- }
- int main() {
- cin >> n;
- int r,s;
- int igrac = X;
- // postavi pocetne zetone
- ploca[3][3] = ploca[4][4] = X;
- ploca[3][4] = ploca[4][3] = O;
- for (int i = 0 ; i < n ; i++) {
- cin >> r >> s;
- r--; s--;
- // postavi zeton
- ploca[r][s] = igrac;
- // okreni ako treba i broji okrete
- okreni(r,s,igrac);
- // promjeni igraca
- igrac = (X+O) - igrac;
- }
- // ispisi kolko je bilo okrenutih
- cout << okrenutih << endl;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement