Comentário por Henrique Vianna
Conhecimento prévio necessário:
Para achar a resposta para uma dada dama
, basta checarmos para cada outra dama
se ela se encontra na mesma linha, coluna ou diagonal de
. Para tanto, deve-se checar os seguintes casos:
- Mesma linha: verdade se
. - Mesma coluna: verdade se
. - Mesma diagonal: verdade se
.
Se qualquer uma dessas condições for verdadeira, deve-se somar
à resposta de
. Então, basta fazer dois loops, um para cada dama
e outro passando por cada dama
. Segue o código:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <bits/stdc++.h> | |
| using namespace std; | |
| const int MAX = 75; | |
| int n, x[MAX], y[MAX]; | |
| int main() | |
| { | |
| ios_base::sync_with_stdio(false); | |
| cin.tie(NULL); | |
| cin >> n; | |
| for(int i = 1; i <= n; i++) | |
| cin >> x[i] >> y[i]; | |
| for(int i = 1; i <= n; i++) | |
| { | |
| int ataques = 0; | |
| for(int j = 1; j <= n; j++) | |
| { | |
| if(i == j) continue; | |
| int dx = x[j] – x[i], dy = y[j] – y[i]; | |
| if(dx == 0 || dy == 0 || abs(dx) == abs(dy)) | |
| ataques++; | |
| } | |
| cout << ataques << '\n'; | |
| } | |
| } |
