Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n;
- int m[8][8];
- char v[20][10];
- void zera(){
- for(int i = 0; i < 8; i++)
- for(int j = 0; j < 8; j++)
- m[i][j] = 0;
- }
- bool dentro(int i, int j){
- if(i < 0 or i > 7 or j < 0 or j > 7)
- return false;
- return true;
- }
- bool comeu(int i, int j){
- if(dentro(i, j) and m[i][j] == 2)
- return true;
- return false;
- }
- bool abigo(int i, int j){
- if(dentro(i, j) and m[i][j] == 1)
- return true;
- return false;
- }
- bool move(int i, int j, vector<int> &dx, vector<int> &dy, int lim){
- for(int k = 0; k < dx.size(); k++){
- int x = i, y = j;
- for(int l = 0; l < lim; l++){
- x += dx[k]; y += dy[k];
- if(comeu(x, y))
- return true;
- if(!dentro(x, y) or abigo(x, y))
- break;
- }
- }
- return false;
- }
- bool peao(int i, int j){
- vector<int> dx = {1, 1};
- vector<int> dy = {1, -1};
- return move(i, j, dx, dy, 1);
- }
- bool bispo(int i, int j){
- vector<int> dx = {1, 1, -1, -1};
- vector<int> dy = {-1, 1, -1, 1};
- return move(i, j, dx, dy, 8);
- }
- bool torre(int i, int j){
- vector<int> dx = {0, 1, 0, -1};
- vector<int> dy = {1, 0, -1, 0};
- return move(i, j, dx, dy, 8);
- }
- bool rainha(int i, int j){
- return (bispo(i, j) or torre(i, j));
- }
- bool rei(int i, int j){
- vector<int> dx = {-1, 0, 1, 1, 1, 0, -1, -1};
- vector<int> dy = {1, 1, 1, 0, -1, -1, -1, 0};
- return move(i, j, dx, dy, 1);
- }
- bool peca(int i){
- int x = '8' - v[i][2], y = v[i][1] - 'a';
- if(m[x][y] == 2)
- return false;
- if(v[i][0] == 'P')
- return peao(x, y);
- if(v[i][0] == 'T')
- return torre(x, y);
- if(v[i][0] == 'B')
- return bispo(x, y);
- if(v[i][0] == 'R')
- return rainha(x, y);
- return rei(x, y);
- }
- bool confere(int i, int j){
- if(!dentro(i, j))
- return true;
- int aux = m[i][j];
- m[i][j] = 2;
- for(int k = 0; k < n; k++)
- if(peca(k)){
- m[i][j] = aux;
- return true;
- }
- m[i][j] = aux;
- return false;
- }
- int main(int argc, char const *argv[])
- {
- while(scanf(" %i", &n) != EOF){
- zera();
- for(int i = 0 ; i < n; i++){
- cin >> v[i];
- m['8'-v[i][2]][v[i][1]-'a'] = 1;
- }
- string k; cin >> k;
- int x = '8'-k[2], y = k[1]-'a';
- int ok = 1;
- if(!confere(x, y))
- ok = 0;
- vector<int> dx = {-1, 0, 1, 1, 1, 0, -1, -1};
- vector<int> dy = {1, 1, 1, 0, -1, -1, -1, 0};
- for(int i = 0; i < 8 and ok; i++)
- if(!confere(x+dx[i], y+dy[i])){
- ok = 0;
- }
- printf(ok ? "SIM\n" : "NAO\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement